2

我正在使用 100 个并发线程运行一个函数,并且我想检测该函数的最后一个运行线程,那么我该怎么做呢?

4

3 回答 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 回答