我正在使用 100 个并发线程运行一个函数,并且我想检测该函数的最后一个运行线程,那么我该怎么做呢?
问问题
1596 次
3 回答
2
在您的主线程中使用Thread.join()
每个线程来完成。
在每个加入的线程完成之前,主线程不会退出。
于 2013-03-12T09:05:28.003 回答
0
使用 JConsole 并监视线程。
它很可能与您的 JDK 一起使用
于 2013-03-12T09:05:49.330 回答
0
这是使用 JDK 提供的 CountDownLatch 的解决方案。我在这里假设您的函数创建线程,并且您可以将锁存器传递给每个线程,并让它们在退出时调用锁存器上的方法。如果不是这种情况,那么您将不得不轮询一组线程。
此代码是 JDK 文档中示例的调整版本:http: //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html
class Driver {
static int numThreads = 10;
public static void main( String[] args ) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(numThreads);
for (int i=0; i < numThreads; ++i) {
new Worker(latch).start();
}
latch.await(); // blocks until all of the threads complete
}
}
class Worker extends Thread {
private final CountDownLatch latch;
Worker(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
try {
System.out.println("do your work here");
} finally {
latch.countDown();
}
}
}
于 2013-03-12T09:19:01.933 回答