2

100 個の同時スレッドを使用して関数を実行していますが、この関数の最後に実行されているスレッドを検出したいのですが、どうすればよいですか?

4

3 に答える 3

2

完了する各スレッドのメインスレッドで使用Thread.join()します。

メインスレッドは、結合された各スレッドが完了するまで終了しません。

于 2013-03-12T09:05:28.003 に答える
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 に答える
0

JConsole を使用してスレッドを監視します。

ほとんどの場合、JDKで利用できます

于 2013-03-12T09:05:49.330 に答える