ThreadBがnotify()を実行していない場合、ThreadAは実行待ち状態になるはずです。 別のスレッドが実行を完了すると、スレッドが待機状態から出る可能性があります。マルチスレッドでnotify()を使わずに待機状態からスレッドを出す
public class ThreadA extends Thread
{
public static void main(String[] args)
{
ThreadB B = new ThreadB();
B.start();
synchronized (B) {
try {
/* Go into waiting state */
B.wait();
} catch (InterruptedException e) {
}
System.out.println(B.result);
}
}
}
class ThreadB extends Thread
{
int result;
public void run()
{
synchronized (this) {
for (int i = 0; i <= 10; i++) {
result = result + i;
}
// notify();
}
}
}
出力:
55
'B.wait()'とは何と思いますか?どうしてそう思うの? –
スレッドは、対象オブジェクトのwait()メソッドを実行することによってこの待機リストに入ります。その時点から、ターゲットオブジェクトのnotify()メソッドが呼び出されるまで、それ以降の命令は実行されません。 –
あなたの例ではどのスレッドがブロックされますか?実際に 'B.wait()'と呼ばれるメインスレッド、または 'B'で参照される' Thread'オブジェクトによって表されるスレッドはありますか? –