线程通信

1.文件共享

2.网络共享

3.共享变量

3.JDK提供的线程协调API(细分:suspend/resume,wait/notify/,park/unpark)

多线程协作的典型场景是:生产者-消费者模型。(线程阻塞,线程唤醒)

suspend和resume容易出现死锁代码(弃用):

1.在同步代码中,suspend不会释放锁。

2.如果resume早于suspend调用,则不会恢复线程继续执行。

wait/notify 只能由同一对象锁的持有者线程调用,要写在同步代码块里面。

wait会释放锁,notify/notifyAll不会释放锁。

notify/notifyAll不能早于wait调用,否则也会出现死锁。

 

park/unpark 等待许可/许可,不需要和同步代码块使用,如果一起使用,不会释放锁,容易出现死锁。

不要求park和unpark 的调用顺序,多次调用unpark后,再调用park,线程会直接运行

 

在线程代码中调用if语句进行判断,是否进入等待状态,是错误的

官方建议应该使用循环中检查等待条件,原因是处于等待状态的线程可能会收到错误的警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足条件的情况下退出。

伪唤醒是由更底层的原因导致的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值