2017-04-14 88 views
-1

线程A阻塞的线程能够唤醒自己吗?

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

synchronized void methodB() { 
    notify(): 
} 

线程B

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

在一个场景中这样,可以在线程被阻塞唤醒自己?

+0

可能只是我,但我并不完全明白这个问题。你可以发布[mcve]吗? – CollinD

+1

如果线程A正在休眠并且线程B将线程A唤醒,那么您不清楚为什么要问线程是否可以自行唤醒它。顺便说一句,答案是否定的。 – alfasin

+1

@CollinD - 问题是没有MCVE是可能的这个问题。 OP(表面上)试图做的事情不能用Java或任何其他命令式编程语言来表达。 (我毫不犹豫地说根本没有PL,因为他们可以想象成是一个计算模型,这是可能的......并且该模型可以想象成是可实现的,例如在量子处理器上。) –

回答

4

阻塞的线程能唤醒自己吗?

没有。

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

做了什么......包括致电notify() ......要求线程已被解除封锁。


如果你的设计需要这个,它是无法实现的。这里有几个想法......虽然你的问题也不完全一样。

  1. 而不是wait()使用定时等待;例如wait(millis)。这将等待一个通知(从另一个线程!)或直到millis毫秒已经过去......无论哪个先发生。

  2. 使用第二个线程notify()第一个。