84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
論理的に言えば、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)
このメソッドのコメントに一文が書かれています