判断线程池中所有线程是否执行完毕
根据线程池中的总线程数目等于完成的线程数目:pool.getTaskCount()和pool.getCompletedTaskCount()
public interface FutureFuture
表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。
计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。
还提供了其他方法,以确定任务是正常完成还是被取消了。
一旦计算完成,就不能再取消计算。
如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future 形式类型、并返回 null 作为底层任务的结果。
pool.getTaskCount() == pool.getCompletedTaskCount()
package com.luna.thread;
import java.util.Random;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadsIsDone {
public static void main(String[] args) {
// 创建一个10个线程的线程池
ThreadPoolExecutor pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue());
for (int i = 0; i |