ホームページ  >  に質問  >  本文

java - マルチスレッド通知に関する質問

リーリー

論理的に言えば、t1.wait() はメインスレッドをブロックする必要があり、他に通知する場所はありません。
t1.start() を削除した後は、メインスレッドをブロックできる可能性があります。 ###これはどういう意味ですか?コンパイラの最適化?それとも、同期されたコード ブロック内でモニターが操作されない場合、アクティブな通知は終了しますか? ?

给我你的怀抱给我你的怀抱2713日前578

全員に返信(1)返信します

  • 仅有的幸福

    仅有的幸福2017-05-17 10:03:54

    実際には、これはスレッドの実行に関係しています。 Javaドキュメントでは、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} を使用しないことを推奨します。

    太字を参照してください。実際には、スレッドの終了後に呼び出されるnotifyAllがウェイクアップの待機を引き起こします。これは、仮想マシンの最適化によって引き起こされるものではありません。あなたの混乱に答えられることを願っています

    返事
    0
  • キャンセル返事