1

Java スレッドのソース コードを読んでいますが、よくわからない問題があります。メインスレッドと、長時間消費するワークスレッドの2つのスレッドがあり、メインスレッドはワークスレッドが死ぬまで待機させたいので、ワークスレッドでjoinメソッドを呼び出します.スレッドソースコードでは、ワークスレッドが終了するとメインスレッドが待機します.生きている:

 while (isAlive()) {
            wait(0);
        }

作業スレッドが作業を完了して死ぬと、メインスレッドはどうなりますか? 作業スレッドでnotifyAllメソッドを自動的に呼び出すことにより、スレッドスケジューラによって通知されますか?

4

3 に答える 3

1

ソース コードで見たように、参加スレッドが呼び出されたので、ターゲット スレッドはorをwait()呼び出してウェイクアップする必要があります。notify()notifyAll

Thread ソース コードのどこにもそれが見られない場合は、別のクラス、ネイティブ コード、または非公開の JVM ベンダー実装コードで発生している可能性があります。

joinただし、これは実装の詳細です。ドキュメントに記載されているように、ターゲット スレッドが終了したときに が戻ることは確実です。

于 2013-03-16T03:12:23.790 に答える
0

メイン スレッド内から呼び出すworkerThread.join()と、メイン スレッドはworkerThread終了するまで実行を一時停止します。次に、メイン スレッドは、join()呼び出しの後に次のステートメントに移動します。

これは、Java チュートリアルのSimpleThreadsの例で示されています。

于 2013-03-16T03:08:53.857 に答える