在我的代碼中,我只是產生了一些線程,然後搜索我的線程列表以找到一個活着並加入它,直到它死亡。
你是如何(以及爲什麼)「搜索我的線程列表」?我反而添加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();
}
更妙的是使用由Executors
給出的ExecutorService
S的一個。他們圍繞創建線程池並等待池完全完成有很多功能。幾乎總是建議超過new Thread(...)
。
我無法檢測他們還活着以同樣的方式,當我使用自定義的子類我做
如果你正在嘗試設置Thread
的名字,那麼你可以在你的Runnable
的構造函數中不要這樣做。你可以然而在run()
方法中做這個。你可以這樣做:
new Thread(new Runnable() {
public void run() {
Thread.currentThread().setName("...");
}
});
否則,我不知道爲什麼你會不會看到你的Thread
除非它已經完成。
他們似乎並沒有結束,永遠。
使用Runnable
,線程完成時的run()
方法返回 - 無論是通過return
或throw
。這與延伸Thread
非常相似,所以我不確定爲什麼這不起作用。
雖然您可以顯示您的代碼(並更改標題)以使其成爲唯一的問題,但這是重複的。 – Gray 2012-04-26 20:43:41