根据Java线程状态信息调用wait()将导致线程进入BLOCKED状态.但是,这段代码将在WAITING状态的Thread中生成(在被调用之后).
class bThread extends Thread {
public synchronized void run() {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有什么不对吗?任何人都可以向我解释这种行为吗?任何帮助,将不胜感激!
Jos*_*ahn 15
该线程正在等待,直到通知为止.然后它变为BLOCKED尝试重新进入同步区域,直到所有其他线程都离开.
您发布的链接中的相关部分(关于WAITING):
例如,在对象上调用Object.wait()的线程正在等待另一个线程在该对象上调用Object.notify()或Object.notifyAll().
和(关于BLOCKED):
处于阻塞状态的线程正在等待监视器锁定,以便在调用Object.wait后重新进入同步块/方法.
当线程尝试从wait()返回时,最后一部分发生,但直到那时才发生.
监视器一次执行一个线程.假设你有T1-T10线程,9个是BLOCKED一个,一个是RUNNABLE.每隔一段时间,监视器就会选择一个新线程来运行.当发生这种情况时,选择/当前线程,说T1,从去RUNNABLE到BLOCKED.然后另一个线程,比如T2,BLOCKED从而RUNNABLE成为当前线程.
当其中一个线程需要某些信息可供另一个线程使用时,您可以使用wait().在这种情况下,线程将被标记为WAITING直到它被notify()编辑.因此,在此之前,监视器不会执行正在等待的线程.一个例子是,等到有待卸载的盒子.装箱的人会在发生这种情况时通知我.
换句话说,无论是BLOCKED和WAITING不活动线程的状态,而是一个WAITING线程不能RUNNABLE不用去BLOCKED第一.WAITING线程"不希望"变为活动,而BLOCKED线程"想要"但不能,因为它不是轮到他们.
我认为.
| 归档时间: |
|
| 查看次数: |
19334 次 |
| 最近记录: |