Java的线程通信基础

Java的线程通信基础
java线程通信介绍
  1. java通信一般是会采用共享变量。
  2. 使用共享变量就会有安全问题,就会产生锁(syncronized)。
  3. 使用了锁就会有线程的等待和唤醒问题。
这一节介线程的等待和唤醒问题
被弃用的supend和resume
  1. supend/resume是在线程(Thread类中的)所以和锁是没关系的
  2. supend/resume 是解决不了变量的共享问题所以就会引入锁(syncronized)的概念
  3. supend/resume 加上锁就会导致死锁的问题(因为是单纯的线程等待和唤醒) 线程等待是会占用此线程锁的
  4. supend/resume 先进行resume之后再supend还是会进行阻塞的。
    综合以上的特性是不建议使用的
wait和notify/notifyAll
  1. wait和notify/notifyAll 是在Object类中
  2. wait和notify/notifyAll 必须和syncronized一起使用 (因为wait会释放对象锁的)
  3. wait和notify/notifyAll 也是会有supend/resume 问题 如果线程先唤醒之后在wait是没有办法再次唤醒的除非再调用notify
    特点:和syncronized绑定了有局限,但是会自动释放对象锁
park和unpark
  1. park和unpark是在LockSupport类中 提供的API也是单纯的等待和唤醒操作
  2. park和unpark 可以单独使用和锁是没有关系的
  3. park和unpark 解决了 supend/resume 问题 如果线程先unpark之后在park是可以直接往下运行的
    在这里插入图片描述

注意:unpark的是不叠加的

总结

在这里插入图片描述

注意(伪唤醒的问题)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值