raf*_*ian 28 java multithreading thread-state java-threads
SO共识与互联网上几乎每个Java线程状态图之间似乎存在差异; 具体来说,关于从 WAITING之后的线程状态转换notify()或被notifyAll()调用...
所以关于SO的共识是:一个线程从调用之后转换WAITING到; 或者; 下图说明了绿色的这种转变.BLOCKEDnotify()notifyAll()
为什么网上的大多数状态图都说明了转换WAITING为RUNNABLE,而不是BLOCKED?红色描绘显示错误的过渡; 我错过了什么吗?

Sot*_*lis 14
任何显示notify将线程从WAITING带到RUNNABLE 的调用的图表都是错误的(或者使用了未明确的快捷方式).一旦线程从一个notify(甚至是虚假的唤醒)中唤醒,它需要重新锁定它正在等待的对象的监视器.这是BLOCKED国家.
线程的线程状态被阻塞等待监视器锁定.处于阻塞状态的线程正在等待监视器锁定以进入同步块/方法或在调用后重新输入同步块/方法
Object.wait.
这在javadoc中解释Object#notify():
唤醒的线程将无法继续,直到当前线程放弃对此对象的锁定.
然后线程等待,直到它可以重新获得监视器的所有权并继续执行.
| 归档时间: |
|
| 查看次数: |
9820 次 |
| 最近记录: |