线程的协调

本文详细解析Java线程协调的关键方法wait、notify和notifyAll,包括它们的工作原理、使用场景及注意事项。通过阐述waitset的概念,帮助开发者更好地理解和运用这些方法来优化多线程程序的执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说起线程的协调,我们就必须要知道三个方法:wait,notify和notifyAll。


具体讲三个方法之前先说一个概念wait set(也就是线程休息室)。

每个实例都有wait set,wait set是一个在执行该实例的wait方法时、操作停止的线程的集合。

进入wait set的线程如果想退出wait set,许满足下列条件:

1 有其他线程以notify方法唤醒此线程。

2 有其他线程以notifyAll方法唤醒此线程。

3 有其他线程以interrupt方法唤醒此线程。

4 wait方法已经到期。


wait是让线程停下,乖乖的等候,此线程进入wait set。

notify是唤醒指定的在等待的线程,随机唤醒一个此实例的wait set中的等待的线程,等到notify释放锁,在去争夺锁。

notifyAll是唤醒所有在等待的线程,唤醒所有此实例的wait set中的等待的线程,等到notifyAll释放锁,这些线程再去争夺锁。


wait,notify和notifyAll都是Object的方法,因为Thread也继承Object,所以也有这三个方法。

在Object的源码如下:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值