如何检测java中最后运行的线程

如何检测java中最后运行的线程,java,multithreading,Java,Multithreading,我正在运行一个使用100个并发线程的函数,我想检测该函数的最后一个运行线程,那么如何才能做到这一点呢?在主线程中使用thread.join(),让每个线程完成 在每个连接的线程完成之前,主线程不会退出。使用JConsole并监视线程 它很可能在您的JDk中可用,下面是一个使用JDk提供的CountDownLatch的解决方案。这里我假设您的函数创建线程,并且您可以将闩锁传递给每个线程,并让它们在退出闩锁时调用闩锁上的方法。如果不是这样,那么您必须轮询一组线程 此代码是JDK文档中示例的调整版本:

我正在运行一个使用100个并发线程的函数,我想检测该函数的最后一个运行线程,那么如何才能做到这一点呢?

在主线程中使用
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();
    }
 }
}