本文主要是介绍多线程--ExecutorService,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
相比ExecutorService,CompletionService可以更精确和简便地完成异步任务的执行
CompletionService的一个实现是ExecutorCompletionService,它是Executor和BlockingQueue功能的融合体,Executor完成计算任务,BlockingQueue负责保存异步任务的执行结果。
ExecutorCompletionService:实现了CompletionService,将执行完成的任务放到阻塞队列中,通过take或poll方法来获得执行结果
WorkTask
public class WorkTask implements Callable<String> {private String name;public WorkTask(String name) {this.name = name;}@Overridepublic String call() throws Exception {//休眠随机时间,观察获取结果的行为。int sleepTime = new Random().nextInt(1000);Thread.sleep(sleepTime);String str = name+" sleept time:"+sleepTime;System.out.println(str+" finished....");return str;}
}
CompletionTest
public class CompletionTest {private final int POOL_SIZE = 10;private final int TOTAL_TASK = 10;// 方法二,通过CompletionService来实现获取线程池中任务的返回结果public void testByCompletion() throws InterruptedException, ExecutionException {ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE);CompletionService<String> service = new ExecutorCompletionService<String>(pool);// 向里面扔任务for (int i = 0; i < TOTAL_TASK; i++) {service.submit(new WorkTask("ExecTask" + i));}// 检查线程池任务执行结果for (int i = 0; i < TOTAL_TASK; i++) {Future<String> future = service.take();System.out.println("CompletionService:" + future.get());}pool.shutdown();}public static void main(String[] args) throws ExecutionException, InterruptedException {CompletionTest completionTest = new CompletionTest();completionTest.testByCompletion();}}
http://blog.csdn.net/u010081710/article/details/51376297 java 多线程的实现 这篇关于多线程--ExecutorService的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!