コードだけmain()で新しいスレッドを開始した後、wait()を呼び出すとメインスレッドをブロックできませんか?
static class ThreadA extends Thread {
public ThreadA(String name) {
super(name);
}
@Override
public void run() {
synchronized (this) {
System.out.println(Thread.currentThread().getName() + " call notify()");
}
}
}
public static void main(String[] args) throws InterruptedException {
ThreadA t1 = new ThreadA("t1");
synchronized (t1) {
System.out.println("start: " + Thread.currentThread().getName());
t1.start();
t1.wait();
System.out.println(" -- end -- ");
}
}
と出力されている参照してください。あなたがThread.join()
で必要なものメインスレッド
メインスレッドをブロックしていますが、何とか解放されています。 t1は実行を終了するので、メインスレッドは最後のスレッドである必要があります。 – matt
しかし、同期されたボルクの中でwaitを呼び出すと、メインスレッドがブロックされます。@ matt – chasel
はい、メインスレッドがブロックされた後、別のスレッドが実行されて何らかの理由でメインスレッドが起動します。これは、偽のウェークアップが存在する可能性があるため、waitを使用することをお勧めします。したがって、whileループの提案または 'join 'の提案。 – matt