WAIT 和 BLOCKED 线程状态之间的区别

新手上路,请多包涵

线程状态WAIT和线程状态BLOCKED有什么区别?

Thread.State 文档

封锁

阻塞等待监视器锁的线程处于此状态。

等待

无限期等待另一个线程执行特定操作的线程处于此状态

没有向我解释区别。

原文由 More Than Five 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 674
2 个回答

一旦线程在对象上调用 wait() 就进入等待状态。这称为 等待 状态。一旦一个线程进入等待状态,它将需要等到其他线程调用 notify()notifyAll() 对象。

一旦通知此线程,它将不可运行。可能是其他线程也被通知(使用 notifyAll() )或者第一个线程还没有完成他的工作,所以它仍然被阻塞直到它有机会。这称为 阻塞 状态。每当一个线程试图获取对象上的锁而其他线程已经持有该锁时,就会发生阻塞状态。

一旦其他线程离开并且它有这个线程机会,它就会进入 Runnable 状态,之后它有资格根据 JVM 线程机制接手工作并进入运行状态。

原文由 Ankit Bansal 发布,翻译遵循 CC BY-SA 4.0 许可协议

区别相对简单。

BLOCKED 状态下,一个线程即将进入一个 synchronized 块,但是另一个线程当前运行在 synchronized 同一个对象—块中。然后第一个线程必须等待第二个线程退出它的块。

WAITING 状态下,一个线程正在等待另一个线程的信号。这通常通过调用 Object.wait()Thread.join() 。然后该线程将保持此状态,直到另一个线程调用 Object.notify() 或死亡。

原文由 Flavio 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题