如何检测java中最后运行的线程
我正在运行一个使用100个并发线程的函数,我想检测该函数的最后一个运行线程,那么如何才能做到这一点呢?在主线程中使用如何检测java中最后运行的线程,java,multithreading,Java,Multithreading,我正在运行一个使用100个并发线程的函数,我想检测该函数的最后一个运行线程,那么如何才能做到这一点呢?在主线程中使用thread.join(),让每个线程完成 在每个连接的线程完成之前,主线程不会退出。使用JConsole并监视线程 它很可能在您的JDk中可用,下面是一个使用JDk提供的CountDownLatch的解决方案。这里我假设您的函数创建线程,并且您可以将闩锁传递给每个线程,并让它们在退出闩锁时调用闩锁上的方法。如果不是这样,那么您必须轮询一组线程 此代码是JDK文档中示例的调整版本:
thread.join()
,让每个线程完成
在每个连接的线程完成之前,主线程不会退出。使用JConsole并监视线程
它很可能在您的JDk中可用,下面是一个使用JDk提供的CountDownLatch的解决方案。这里我假设您的函数创建线程,并且您可以将闩锁传递给每个线程,并让它们在退出闩锁时调用闩锁上的方法。如果不是这样,那么您必须轮询一组线程 此代码是JDK文档中示例的调整版本:
类驱动程序{
静态int numThreads=10;
公共静态void main(字符串[]args)引发InterruptedException{
CountDownLatch latch=新的CountDownLatch(numThreads);
对于(int i=0;i
您的意思是“检测何时只剩下一个线程”吗?使用带有不同标记的“登录所有线程”,以便在“日志u”中可以看到哪个线程将执行lastYes,当只剩下该函数的一个线程时,而不是整个程序的最后一个线程。您需要知道哪个线程是最后一个运行的线程,还是只知道它们何时全部退出?如果是,那么为什么?为什么不使用synchronized标志?在本例中,“主”线程将是生成其他线程的线程。线程API说->join()等待该线程死亡。我想他想让它等到所有繁殖的线程都死掉
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();
}
}
}