线程篇(JAVA)

news2024/11/26 5:44:13

  💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和大家一起进步成长💕

目录

线程(重点)

第一种线程的实现

第二种线程的实现

线程的执行原理

线程的生命周期

休眠

线程的并发

Synchronized修饰在方法体

Synchronized修饰在方法

死锁

网络编程

网络模型

OSI(模型):七层协议

TCP五层模型

HTTP(超文本传输协议)

HTTP请求

HTTP响应格式

常用的命令(重点)

本机地址(重点)

端口

TCP和UDP(重点)

Socket

TCP通信

服务端

客户端

线程(重点)

进程: 进程是指在系统中正在运行的一个应用程序

线程: 线程是进程的一个单元。

多线程: 一个进程中有多个线程在同时运行。

Jvm是多线程的,在我们运行jvm的时候,后台会运行垃圾回收的线程,来清理没有被引用的对象

第一种线程的实现

类声明为Thread的子类,该子类应该重写Thread类的run方法,

线程启动的时候使用线程start方法而不是run,调用run方法相当于是调用普通的方法

第二种线程的实现

类直接实现Runable接口

实现run的方法

线程的执行原理

线程的并发执行是通过多个线程不断的切换CPU的资源,这个速度非常快,我们感知不到,我们能感知到的就是几个线程并发在执行

线程的生命周期

1. 新建: 线程被new出来

2. 准备就绪: 线程具有执行的资格,即线程调用了start(),没有执行的权利,就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行

3. 运行: 具备执行的资格和执行的权利,当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能

4. 阻塞: 没有执行的资格和执行的权利,在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如Thread.sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;

5. 销毁: 线程释放资源, 如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;

休眠

Thread.sleep(1000) 1000毫秒, sleep只是当前线程休眠,然后让出CPU,当然不会释放锁。

wait的用法:(wait会释放锁) 1.必须配合synchronized使用 2.且使用的必须为同一个对象:synchronized (A)配合A.wait()使用 3.当线程执行到object.wait()时,此线程会同时释放锁synchronized (object);当它结束了wait后,此线程又会重新去争抢锁synchronized (object)。

wait结束等待: 1.使用notify: 必须配合synchronized使用 使用notify的对象为A,则只能唤醒A.wait()的线程,不能唤醒B.wait()的线程; 小区别: notify()方法——随机唤醒一个wait的线程 notifyAll()方法——唤醒所有wait的线程,让这些被唤醒的线程去争抢,按争抢顺序依次执行

线程的并发

案例: 比如说12306卖火车票,小米抢购

例如: 动车站有100张票,3个窗口同时卖票。

分析: 有3个窗口就是3个线程同时在运行,100个票同时供给3个窗口

Synchronized修饰在方法体

Synchronized修饰在方法

死锁

是指多个线程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进

作业: 写一个死锁和卖票的程序

网络编程

什么是网络编程:

就是用来实现网络互通的不同计算机运行程序之间进行数据的交换的编程

网络模型

OSI(模型):七层协议

应用层: 如: HTTP协议 主要解决如何包装数据,用于通信的应用程序和用于消息传输的底层网络提供接口,提供常见的网络应用服务
表示层: Linux给window发包,两个系统语法不一致,就像安装包一样,exe是不能在linux下用的,shell在window下也是不能直接运行的。于是需要表示层,帮我们解决不同系统之间的通信语法问题
会话层: 要建立一个自动收发包,自动寻址的功能。会话层的作用就是建立和管理应用程序之间的通信,自动调用TCP去打包
传输层: 如: TCP协议 保证传输大量文件时的准确性。于是,对发出去的数据进行封装。就像发快递一样,一个个地发。
网络层: 如: IP协议 即路由器,交换机那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议
数据链路层:通过无线电波,通过其它介质来传输。然后我还要保证传输过去的比特流是正确的,要有纠错功能。
物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等它的主要作用是传输比特流,

TCP五层模型

img

TCP/IP协议中的应用层处理七层模型中的第五层、第六层和第七层的功能。TCP/IP协议中的传输层并不能总是保证在传输层可靠地传输数据包,而七层模型可以做到。TCP/IP协议还提供一项名为UDP(用户数据报协议)的选择。UDP不能保证可靠的数据包传输

HTTP(超文本传输协议)

是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式

HTTP请求

由三部分组成,分别是:请求行、消息报头、请求正文。

请求行

Method Request-URI HTTP-Version(三部分空格隔开)

其中:

Method表示请求方法
      GET       请求获取Request-URI所标识的资源
      POST       在Request-URI所标识的资源后附加新的数据(GET请求往往把自制
                  数据放在quary_string中,POST请求往往把自定制数据放在body中)
      HEAD      请求获取由Request-URI所标识的资源的响应消息报头
      PUT      请求服务器存储一个资源,并用Request-URI作为其标识
      DELETE     请求服务器删除Request-URI所标识的资源
      TRACE      请求服务器回送收到的请求信息,主要用于测试或诊断
      CONNECT     保留将来使用
      OPTIONS     请求查询服务器的性能,或者查询与资源相关的选项和需求
​
Request-URI是一个统一资源标识符;
      请求的地址 
HTTP-Version表示请求的HTTP协议版本。
现在大多都是1.1的
​

消息报头(header)

若干个键值对,每个键值对占一行,每个键和值之间使用:分割

请求正文(body)

 一般GET请求没有body,POST请求才有

HTTP响应格式

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文。

状态行

HTTP-Version表示服务器HTTP协议的版本;

Status-Code表示服务器发回的响应状态代码;

Reason-Phrase表示状态代码的文本描述。

状态码: 1xx:指示信息–表示请求已接收,继续处理; 2xx:成功–表示请求已被成功接收、理解、接受; 3xx:重定向–要完成请求必须进行更进一步的操作; 4xx:客户端错误–请求有语法错误或请求无法实现; 5xx:服务器端错误–服务器未能实现合法的请求。

消息报头(header)

任然是一组键值对,每个键值对占一行每个键和值之间用:分割

Content-Type:描述了body的数据格式类型; Content-Length:描述了body的数据长度(字节Byte); Host:描述了访问的主机名(域名/ip); Referer:当前页面是从哪个页面跳转过来的; Cookie:字符串,浏览器的本地存储的能力之一,中经常会包含一种叫做“身份标识”的信息(session id); Session:服务器端维护的一个数据结构,记录了用户的身份信息,session id就是session对象的唯一身份标识,session id 存在浏览器中,浏览器后续在访问服务器的时候,就会自动带着session id,从而让服务器知道当前请求是哪个用户发来的。

User-Agent:会告诉网站服务器,访问者是通过什么工具来请求的,手机还是电脑等。

响应正文(body)

响应中的正文格式也有很多种,比如可以是一个html,也可以是一个css,也可以是一个JavaScript,还可以是一个图片数据,还可以是一个json数据

常用的命令(重点)

ping ,ipconfig ,telnet

本机地址(重点)

127.0.0.1 代表自己的电脑主机

localhost 代表本机

端口

用于标识进程的逻辑地址,不同的进程端口不同。

netstat -ano

比如说QQ,微信,是通过ip:端口发送数据到对应好友的电脑上。

TCP和UDP(重点)

常见的两种协议:

UDP:将数据源和目的地封装到数据包中,不需要建立连接

每个数据包的大小有限制

因为不用建立连接,所以安全性差,但是速度快

TCP: 建立连接形成传输数据的通道,然后再传输数据,通过三次握手。安全性高,效率低

Socket

Socket是网络编程提供的一种机制,通信的两端都要有socket,网络通信其实就是socket间的通信,数据在socket间的io流上通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

醇酰基转移酶基因对猕猴桃酯生物合成的作用

文章信息 题目:Alcohol acyl transferase genes at a high-flavor intensity locus contribute to ester biosynthesis in kiwifruit 刊名:Plant Physiology 作者:Edwige J F Souleyre et al. 单位:New Zealand Institute for…

工业互联网数据监测预警解决方案

一、工业互联网数据安全趋势 随着“云、大、物、移、智”等新一代信息技术与制造业的融合发展,数字化生产、网络化协同、个性化定制、服务化延伸等生产运营模式逐渐成为常态,工业互联网数据不断走向开放流动。但原本封闭在工业现场的数据上网上云会带来…

论互联网公司的盈利能力

这个月,互联网公司三季度财报基本披露完毕。其中的共同点是都开始降本增效,提升盈利能力(或者还在努力扭亏为盈)。互联网公司基本是面向C端消费者的,京东创始人刘强东曾提出一个贯穿消费行业的“十节甘蔗”理论&#x…

[附源码]计算机毕业设计springboot健身房预约平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【剧前爆米花--爪哇岛寻宝】面向对象的三大特性——封装、继承以及多态的详细剖析(中——多态)。

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java面向对象三大特性——多态的文章,在本篇文章中我会分享多态的一些基础语法以及类在继承时代码的底层逻辑和执行顺序。 目录 多态的定义及实现条件 多态…

AWS动手实验 - 创建一个Web3网站

实验操作和录播 亚马逊云科技开发者社区 注意事项 按照操作手册进行即可,需要注意到的几个地方: 1:EC2 的 scale 可以不用设置为large那么高,small就够用了。 2:创建堆栈,是点击这个那个按钮&#xff0…

水土保持监测,无人机倾斜摄影该如何做?

水土监测在传统监测方法中存在着许多监测死角。近年来,随着无人机的普及,无人机倾斜摄影三维建模技术在水土保持领域发挥了巨大作用。 我国具有地形地貌范围广,地质情况复杂等特点,每年地质灾害造成很多人员伤亡和财产损失&#…

数商云SCM管理系统库存管理功能助力新能源汽车企业仓储管理更高效

在全球电动化浪潮下,新能源汽车近年来迎来快速发展,但同时,随之而来其面临的关键零部件供应链安全问题也愈来愈突出,新能源汽车供应链格局正在面临重塑,保障新能源汽车产业健康发展仍需持续发力。 随着国际形势突变&a…

Markdown基本语法

描述 Markdown 是一种轻量级的「标记语言」,可读、直观、学习成本低。 1. 强调 1.1 斜体(单*、单_) 例: *AlexYY* _AlexYY_ 效果: AlexYY AlexYY 1.2 加粗(双*、双_) 例: *Ale…

python常用代码总结2

1、列表的常规追加元素、追加列表操作 (1)列表追加多个元素,比如追加0-9 ls [] ls.extend(list(range(10)))ls Out[20]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (2)列表追加多个相同的元素,比如追加10个0 ls1 [] for i in range(10):ls1.append(0)ls1 Ou…

如何通过链路追踪进行定时任务诊断

作者:千习 背景简介 什么是定时任务 定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务技术方案》。 https://developer.aliyun.com/article/882393 什么是链路追踪 随着分布式…

[附源码]计算机毕业设计springboot基于微信小程序的网络办公系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

zookeeper集群环境搭建及使用

文章目录前提条件下载解压配置文件集群配置测试常用命令前提条件 操作系统:CentOS7服务器:3台Java环境:JDK1.8。安装教程参考JDK1.8安装 下载 执行cd /usr/local进入安装的目录执行命令wget https://archive.apache.org/dist/zookeeper/zo…

ThreadPoolExecutor类是如何保证线程池正确运行的

ThreadPoolExecutor类中的重要属性 在ThreadPoolExecutor类中,存在几个非常重要的属性和方法,接下来,我们就介绍下这些重要的属性和方法。 ctl相关的属性 AtomicInteger类型的常量ctl是贯穿线程池整个生命周期的重要属性,它是一…

LRU Cache【理论讲解 + 代码实现】

LRU Cache📖1. 什么是LRU Cache📖2. 为什么需要LRU算法?📖3. LRU Cache的实现📖1. 什么是LRU Cache LRU是Least Recently Used的缩写,意思是最近最少使用. 它是一种Cache替换算法. 什么是Cache? 狭义的…

校园论坛(Java)—— 登录注册和用户信息模块

校园论坛(Java)—— 登录注册和用户信息模块 文章目录校园论坛(Java)—— 登录注册和用户信息模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2. 登录注册模块各层的设计3、登录注册模块设计3.1 用户注册功能3.2 用户…

HighTec 工程配置详解

HighTec 工程配置详解 编译配置 构建配置管理器 管理器内,可以创建各种不同用途的配置项。例如用于生产工程的 ROM 配置,用于调试工程的 Debug 配置。对于每个配置,所设置的工程属性是单独分开的,互相之间没有影响。 打开构建配…

[附源码]计算机毕业设计springboot咖啡销售平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Unity复刻骑砍中的帝国象棋(一)

Unity复刻骑砍中的帝国象棋(一) 起因和简介 这两天从一款游戏中发现了这么个棋类小游戏,觉得挺有意思,没错,就是下面这个: 作为程序员的我,一下就想到复刻它一下。这个棋类小游戏&#xff0c…

【程序人生】4年创作纪念日,不忘初心,继续前行

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…