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