Java Thread wait()=>被阻止了吗?

Chr*_*ris 9 java concurrency

根据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()返回时,最后一部分发生,但直到那时才发生.


zxc*_*bnm 9

监视器一次执行一个线程.假设你有T1-T10线程,9个是BLOCKED一个,一个是RUNNABLE.每隔一段时间,监视器就会选择一个新线程来运行.当发生这种情况时,选择/当前线程,说T1,从去RUNNABLEBLOCKED.然后另一个线程,比如T2,BLOCKED从而RUNNABLE成为当前线程.

当其中一个线程需要某些信息可供另一个线程使用时,您可以使用wait().在这种情况下,线程将被标记为WAITING直到它被notify()编辑.因此,在此之前,监视器不会执行正在等待的线程.一个例子是,等到有待卸载的盒子.装箱的人会在发生这种情况时通知我.

换句话说,无论是BLOCKEDWAITING不活动线程的状态,而是一个WAITING线程不能RUNNABLE不用去BLOCKED第一.WAITING线程"不希望"变为活动,而BLOCKED线程"想要"但不能,因为它不是轮到他们.

我认为.