論理的に言えば、t1.wait() はメインスレッドをブロックする必要があり、他に通知する場所はありません。 t1.start() を削除した後は、メインスレッドをブロックできる可能性があります。 ###これはどういう意味ですか?コンパイラの最適化?それとも、同期されたコード ブロック内でモニターが操作されない場合、アクティブな通知は終了しますか? ?
実際には、これはスレッドの実行に関係しています。 Javaドキュメントでは、public final synchronized void join(long millis)このメソッドのコメントに一文が書かれています
public final synchronized void join(long millis)
<p> この実装では、{@code this.isAlive} を条件とした {@code this.wait} 呼び出しのループが使用されます。 スレッドが終了すると、{@code this.notifyAll} メソッドが呼び出されます。アプリケーションは、{@code Thread} インスタンスで {@code wait}、{@code Notice}、または {@code NoticeAll} を使用しないことを推奨します。
実際には、これはスレッドの実行に関係しています。 Javaドキュメントでは、
太字を参照してください。実際には、スレッドの終了後に呼び出されるnotifyAllがウェイクアップの待機を引き起こします。これは、仮想マシンの最適化によって引き起こされるものではありません。あなたの混乱に答えられることを願っていますpublic final synchronized void join(long millis)
このメソッドのコメントに一文が書かれています