SwingWorker オブジェクトがあり、それがまだ doInBackground() メソッドにあるとします。ユーザーが system.exit(0) を呼び出した場合...どうすれば SwingWorker デーモン/ワーカー スレッドを確実に完了させることができますか? これを手動で行う必要があると思います。現時点で私が持っている最良のアイデアは、 System.exit(0) を呼び出す同じスレッド内/上のすべての未処理のワーカースレッドで join() を呼び出すことです...これは正しいですか?
そして、join() を使用するのが良い考えである場合... join() を呼び出すスレッドに偽のアクティビティがある場合、何らかの while ループで使用する必要がありますか?
例えば:
//疑似コード
Vector<Thread> threadsThatMustFinishBeforeTerminatingJVM = new Vector<Thread>();
Thread closingThread = new Thread(){
public void run(){
for(Thread t: threadsThatMustFinishBeforeTerminatingJVM){
// closingThread waits for t to finish, (is this *really* safe?)
t.join();
}
System.exit(0);
}
}
closingThread.start();
これはまったく正しいですか?