1

可能重复:
如何知道其他线程是否已完成?

我有一个为我执行线程的线程池,我如何知道我通过它的所有线程何时完成?

例如:

main.java

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

线程处理程序.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 回答