1

私は、スレッドを使用することがある既存のアプリケーション用の API の構築に取り組んでいます。だから私の方法の1つはこのようなものです

private SSG theSSG;
...
private void doSomething(){
  theSSG.loadMenu();

//my code
}

現在、loadMenuメソッドはスレッドを生成できますが、必ずしもそうとは限りません。存在する場合はdoSomething、新しいスレッドが他のコードを実行している間に、残りのコードを実行します。私が必要としているのは、 がloadMenu()すべての子スレッドの実行を終了するのを待ってから、次のコード行に進む方法です。ユーザーの選択に基づいているため、実行できる可能性のあるスレッドの参照はありません。使用できませんjoin()。また、アプリケーション (または で何が起こるかloadMenu) を編集することもできません。

4

1 に答える 1

2

Thread オブジェクトへの参照がない限り、スレッドが終了したかどうかを判断することはできません1

(理論的には) JVM 内の既存のすべての Thread オブジェクトをトロールして、タスクに関連付けられている可能性のあるスレッドを (名前で) 識別しようとすることが可能です。しかし、スレッドが何であるかを理解するものからの助けなしに、スレッドを確実に区別する方法がわかりません。そして、そのような助けを得ることができれば、代わりに子参照を求める小さな一歩です.

最善の策は、アプリケーションのこの部分を再設計することです。フレームワークが子スレッドが何であるかを知る (または見つけられる) ように変更するか、「スレッドが終了するのを待つ」機能をそれを実装できるものに委譲できるようにします。


1 - これには (役に立たない) 例外があります。を呼び出すと、いつでも「このスレッド」を見つけることができますThread.currentThread()。ただし、現在のスレッドはまだ生きていることが保証されています。(誤って) スレッドをそれ自体に取得しようとするとjoin()、悪いことが起こります。たとえば、スレッドはデッドロックします。

于 2014-10-26T06:21:41.103 に答える