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 publicList
call()throwsException{ returnArrays.asList(1L,2L); } }; tasks.add(task); } List finalResults=newArrayList<>(10); List >>results=ThreadPool.getThreadPool().invokeAll(tasks); for(Future >ele:results){ List
list=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,从而提高任务的执行效率。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!