在我的代码中,我只是产生了一些线程,然后搜索我的线程列表以找到一个活着并加入它,直到它死亡。
你是如何(以及为什么)“搜索我的线程列表”?我反而添加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