在我的代码中,我只是生成了几个线程,然后在我的线程列表中搜索以找到一个活着的并加入它直到它死去。
您如何(以及为什么)“搜索我的线程列表”?相反,我会将其添加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
s 给出的 s 之一Executors
。他们有很多关于创建线程池和等待池完全完成的功能。几乎总是推荐过来new Thread(...)
。
我无法检测到它们的存在方式与我使用我制作的自定义子类时的方式相同
如果您尝试设置 的名称,Thread
那么您不能在Runnable
. 但是,您可以在run()
方法中执行此操作。你可以做:
new Thread(new Runnable() {
public void run() {
Thread.currentThread().setName("...");
}
});
Thread
否则,我不确定为什么除非它已经完成,否则你不会看到你的。
他们似乎永远不会结束。
使用 a Runnable
,线程在run()
方法返回时结束 - 通过 areturn
或 a throw
。这与扩展非常相似,Thread
所以我不确定为什么这不起作用。