私のコードでは、いくつかのスレッドを生成し、スレッドのリストを検索して、生きているスレッドを見つけ、それが死ぬまでそれに参加しています。
どのように(そしてなぜ)「私のスレッドのリストを検索」していますか?Thread
代わりに、ある種のにを追加Collection
します。その後、繰り返し処理して、それぞれThread
に順番に参加できます。
List<Thread> threads = new ArrayList<Thread();
for (int i = 0; i < 100; i++) {
Thread thread = new Thread(new Runnable() ...);
thread.start();
threads.add(thread);
}
...
for (Thread thread : threads) {
thread.join();
}
さらに良いのは、でExecutorService
指定されたのいずれかを使用することExecutors
です。スレッドプールの作成とプールが完全に終了するのを待つことに関する多くの機能があります。ほとんどの場合、以上をお勧めしnew Thread(...)
ます。
作成したカスタムサブクラスを使用した場合と同じように、それらが生きていることを検出できません。
の名前を設定しようとしている場合はThread
、のコンストラクターでこれを行うことはできませんRunnable
。ただし、メソッドでこれを行うことができます。run()
できるよ:
new Thread(new Runnable() {
public void run() {
Thread.currentThread().setName("...");
}
});
Thread
そうでなければ、それがすでに終わっていない限り、なぜあなたがあなたを見ないのかわかりません。
彼らは決して終わらないようです。
を使用すると、メソッドがaまたは。のいずれかを介して戻っRunnable
たときにスレッドが終了します。これは拡張とほとんど同じなので、なぜこれが機能しないのかわかりません。run()
return
throw
Thread