java知识点汇总(http 和 多线程)

Java知识点

HTTP的三次握手和四次挥手

HTTP请求建立连接步骤

三次握手(两次确认):

  1. 客户端向服务器发出请求连接报文。
  2. 服务收到请求报文后,如果同意,则发出确认报文。
  3. 客户端收到服务器确认之后,再向服务器给出确认,此时客户端进入established(已建立连接)状态。
  4. 当服务器收到客户端确认请求之后,服务器就进入established(已建立连接)状态,双方可以开始通信。

HTTP请求释放连接(四次挥手)

  1. 客户端发出连接释放报文,停止发送数据,客户端进入fin-wait-1(终止等待1)状态。
  2. 服务器收到连接释放报文,发出确认报文,服务端进入了close-wait(关闭等待)状态。
  3. 客户端收到服务器的确认请求之后,客户端进入了fin-wait-2(终止等待2)状态。
  4. 服务器将最后的数据发送完毕后,向客户端发送连接释放报文,服务器进入last-ack(最后确认)状态
  5. 客户端收到服务器的连接释放报文后,必须发出确认,客户端进入了time-wait(时间等待)状态
  6. 服务器只要收到了客户端发出的确认,进入close状态。

synchronized与Lock的区别

用法区别

synchronized可以修改的作用域如下:

① 非静态方法(加的锁为对象锁)

② 静态方法(加的锁为类锁)

③ 代码块(对象锁与类锁均可)

Lock采用lock()对代码进行加锁,unlock()进行解锁

状态区别

① lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现。

② synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包起来,finally中写入unlock,避免死锁的发生)。

③ lock等待锁过程中可以用interrupt来中断等待,而synchronized只能等待锁的释放,不能响应中断。

④ Lock可以通过trylock来知道有没有获取锁,而synchronized不能。

机制区别

① synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁,独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。

② lock用的是乐观锁的方式,乐观锁就是每次不加锁,而是假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作。
是每次不加锁,而是假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值