线程池

//线程的数量
private static final int UPD_NO_THREADS = 5;
//线程池的容量
private ExecutorService executorService = Executors.newFixedThreadPool(UPD_NO_THREADS);

public void runExecutorService(){
List<Callable<Object>> todo = new ArrayList<Callable<Object>>(UPD_NO_THREADS);
//接口Callable<V> 返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。
//Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。
executorService = Executors.newFixedThreadPool(UPD_NO_THREADS);
while(x>0){
for(int x=0;x<100;x++){
//AService是一个实现Runnable接口的类
todo.add(Executors.callable(new AService(y)));
}
//Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。
//取消则由 cancel 方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。
          List<Future<Object>> result = executorService.invokeAll(todo);
// invokeAll(Collection<? extends Callable<T>>tasks)执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。
todo.clear();
}
executorService.shutdown();
}


ExecutorService的submit(runnable)返回Future对象







原文地址:https://www.cnblogs.com/sam-cheng/p/6477719.html