java ThreadPoolExecutor 并发调用实例详解
javaThreadPoolExecutor并发调用实例详解
概述
通常为了提供任务的处理速度,会使用一些并发模型,ThreadPoolExecutor中的invokeAll便是一种。
代码
packagetest.current;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;
importjava.util.concurrent.Callable;
importjava.util.concurrent.ExecutionException;
importjava.util.concurrent.Future;
publicclassTestCallable{
publicstaticvoidmain(String[]args)throwsInterruptedException,ExecutionException{
List>>tasks=newArrayList<>();
for(inti=0;i<10;i++){
Callable>task=newCallable>(){
@Override
publicListcall()throwsException{
returnArrays.asList(1L,2L);
}
};
tasks.add(task);
}
ListfinalResults=newArrayList<>(10);
List>>results=ThreadPool.getThreadPool().invokeAll(tasks);
for(Future>ele:results){
Listlist=ele.get();
finalResults.addAll(list);
}
System.out.println(finalResults);
}
}
packagetest.current;
importjava.util.concurrent.ArrayBlockingQueue;
importjava.util.concurrent.ThreadPoolExecutor;
importjava.util.concurrent.TimeUnit;
publicclassThreadPool{
privatestaticfinalintCORE_SIZE=8;
privatestaticfinalintMAX_SIZE=12;
privatestaticfinallongKEEP_ALIVE_TIME=30;
privatestaticfinalintQUEUE_SIZE=50000;
privatestaticThreadPoolExecutorthreadPool=newThreadPoolExecutor(CORE_SIZE,MAX_SIZE,KEEP_ALIVE_TIME,
TimeUnit.SECONDS,newArrayBlockingQueue(QUEUE_SIZE),newThreadPoolExecutor.AbortPolicy());
publicstaticThreadPoolExecutorgetThreadPool(){
returnthreadPool;
}
}
可以把需要执行的任务创建一个Callabletask,利用线程池中的线程并发的执行这些task,从而提高任务的执行效率。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!