被阻塞的线程可以自行唤醒吗?

时间:2017-04-14 00:33:15

标签: java multithreading

主题A

synchronized void methodA() throws Exception {
    wait();
}

synchronized void methodB() {
    notify():
}

主题B

//... work
A.methodB();    // thread A was so far blocked by calling wait()

在这样的场景中,被阻止的线程可以自行唤醒吗?

1 个答案:

答案 0 :(得分:4)

  

被阻止的线程可以自行唤醒吗?

不。

wait()(或任何其他阻塞调用)中被阻止的线程在解除阻塞之前无法执行任何代码。

做任何事情......包括调用notify() ......要求线程已被解除阻止。

如果你的设计正是如此,那就无法实现。这里有几个想法......虽然两者都不是你要问的。

  1. 而不是wait()使用定时等待;例如wait(millis)。那将等待通知(来自另一个线程!)或直到millis毫秒已经过去......以先发生者为准。

  2. 使用第二个帖子notify()第一个帖子。