java - WAIT 和 BLOCKED 线程状态的区别

标签 java multithreading wait blocked-threads

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

Thread.State documentation :

Blocked
A thread that is blocked waiting for a monitor lock is in this state.

Waiting
A thread that is waiting indefinitely for another thread to perform a particular action is in this state

没有向我解释差异。

最佳答案

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

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

一旦其他线程离开并且它的这个线程机会,它移动到 Runnable 状态之后它是合格的拾取基于 JVM 线程机制的工作并移动到运行状态。

关于java - WAIT 和 BLOCKED 线程状态的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680422/

相关文章:

c++ - C++ 中 "low-level"多线程的基本示例是什么?

vb.net - vb.net 等待第二个表格关闭,然后再继续

javascript - Protractor - 切换到窗口或 iframe 后等待

java - 使用 Google App Engine 开发服务器作为生产服务器

java - 为什么可以声明一个没有初始值的变量?

Java Swing Blank JFrame 即将推出?

java - 在多线程系统中处理POI临时文件

java - 将 Tomcat 线程专用于 servlet

java - 为什么处于 BLOCKED 状态的线程不会被中断?

java - 设置在另一个 XML 文件中定义的 bean 的属性