1

重複の可能性:
他のスレッドが終了したかどうかを知るには?

スレッドを実行するスレッドプールがありますが、渡したすべてのスレッドが完了したことをどのように確認できますか?

例えば:

main.java

for (int i = 0; i < objectArray.length; i++) {
        threadPool.submit(new ThreadHandler(objectArray[i], i));
        Thread.sleep(500);
    }

ThreadHandler.java

public class ThreadHandler implements Runnable {

protected SuperHandler HandlerSH;
protected int threadNum;

public ThreadHandler(SuperHandler superH, int threadNum) {
    this.threadNum = threadNum;
    this.HandlerSH = superH;
}

public void run() {

    //do all methods here

}

ブール値などを設定するために run() セクションに何かを入れるだけですか? それらがすべて完了したことを確認するためにブール値の配列を作成しますか?

ありがとう。

4

1 に答える 1

2

ジョブをスレッド プールに送信すると、Futureインスタンスが返されます。Future.get()ジョブが終了したかどうかを確認するために電話することができます。これは事実上、スレッド プールで実行されているタスクの結合に似ています。

スレッドプールがシャットダウンされ、すべてのタスクが完了するthreadPool.awaitTermination(...)まで待ちたい場合にも呼び出すことができます。

多くの場合、多数のジョブをスレッド プールに送信するとき、それらの将来をリストに記録します。

List<Future<?>> futures = new ArrayList<Future<?>>();
for (int i = 0; i < objectArray.length; i++) {
    futures.add(threadPool.submit(new ThreadHandler(objectArray[i], i)));
}
// if we are done submitting, we shutdown
threadPool.shutdown();

// now we can get from the future list or awaitTermination
for (Future<?> future : futures) {
    // this throws an exception if your job threw an exception
    future.get();
}
于 2013-01-30T15:34:40.230 に答える