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

标签 java multithreading wait java-threads 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(),就会进入等待状态。这称为等待状态。一旦线程达到等待状态,它就需要等待,直到其他线程调用对象上的 notify()notifyAll()

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

一旦其他线程离开并且该线程有机会,它就会进入可运行状态,之后它有资格根据 JVM 线程机制拾取工作并进入运行状态。

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

相关文章:

java - 从后台线程的 catch block 更新表状态

java - 如何将我的数据库连接放在 .war 文件之外?

python - Astroscrappy 无法在多处理 Jupyter 上工作

multithreading - 如何将 Rendezvous 函数放入 jmeter 线程或用户中以实现特定函数

c - 我如何暂停子进程并重置它

linux - bash 脚本打开 chrome 然后在 chrome 关闭时关闭计算机

java - 使用JD-GUI批量反编译Java文件

java - 在 Swing 事件中启动线程

c# - WPF 调度程序抛出 TargetInvocableException

java - 在 Java 线程中等待和通知给定的时间间隔