CompletionService
来源:互联网 发布:虚拟机下安装linux 编辑:程序博客网 时间:2024/06/05 20:27
在java.util.concurrent的包里面,有很多优秀的并发工具,其中CompletionService就是一个接口。
他的实现有多个,ExecutorCompletionService是把executor和CompletionService结合的一种实现。
package com.front.qzq.concurrent;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeUnit;public class ExecutorServiceStudy { public static void main(String[] args) throws Exception{ ExecutorService executorService = Executors.newCachedThreadPool(); CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(executorService); for(int i = 0 ; i < 7; i++){ completionService.submit(new Worker()); } for(int i = 0; i < 7; i++){ Future<Integer> poll = completionService.poll(); if(poll != null){ System.out.println(poll.get()); }else{ System.out.println("The task is not ready!" + i); } TimeUnit.MILLISECONDS.sleep(500); } }}class Worker implements Callable<Integer>{ public Integer call() throws Exception { Random random = new Random(); int result = random.nextInt(4); System.out.println("sleep " + result); TimeUnit.SECONDS.sleep(result); return result; }}
使用CompletionService的好处是,当任务执行完了,我们只需要调用take(阻塞方法,直到有任务执行完成)或者poll(非阻塞方法)方法就好了,获取future对象,实现了生产者和消费者的解耦。无需我们自己去对结果列表进行调度和轮询。
阅读全文
0 0
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService
- CompletionService解读
- CompletionService 简介
- java-CompletionService
- 多线程-CompletionService
- 2016 第七届 蓝桥杯 国赛 机器人塔
- 9. Palindrome Number
- 用好你的Control键(针对类Unix系统用户)
- 【python开发】利用PIP3的时候出现的问题Fatal error in launcher: Unable to create process using '"'
- Python学习笔记(三)
- CompletionService
- 找出不在预定数组中的自然数
- Devops学习实践(二) Jenkins安装、配置、任务构建
- 【PostgreSQL-9.6.3】函数(1)--数值型函数
- html嵌入多媒体文件
- html嵌入mp3
- 天天写业务代码的程序员怎么成为大牛(转自知乎李运华的回答 PS:很干货)
- html嵌入动画
- Openjudge 螺旋加密