线程状态WAIT和线程状态BLOCKED有什么区别?
封锁
阻塞等待监视器锁的线程处于此状态。
等待
无限期等待另一个线程执行特定操作的线程处于此状态
没有向我解释区别。
原文由 More Than Five 发布,翻译遵循 CC BY-SA 4.0 许可协议
线程状态WAIT和线程状态BLOCKED有什么区别?
封锁
阻塞等待监视器锁的线程处于此状态。
等待
无限期等待另一个线程执行特定操作的线程处于此状态
没有向我解释区别。
原文由 More Than Five 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
一旦线程在对象上调用
wait()
就进入等待状态。这称为 等待 状态。一旦一个线程进入等待状态,它将需要等到其他线程调用notify()
或notifyAll()
对象。一旦通知此线程,它将不可运行。可能是其他线程也被通知(使用
notifyAll()
)或者第一个线程还没有完成他的工作,所以它仍然被阻塞直到它有机会。这称为 阻塞 状态。每当一个线程试图获取对象上的锁而其他线程已经持有该锁时,就会发生阻塞状态。一旦其他线程离开并且它有这个线程机会,它就会进入 Runnable 状态,之后它有资格根据 JVM 线程机制接手工作并进入运行状态。