10.Callable与Future的应用
2015-07-12 13:28
344 查看
import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * Callable与Future的应用 * Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现。 * Callable要采用ExecutorService的submit方法提交,返回的future对象可以取消任务。 * CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。 * @author LiTaiQing * */ public class CallableAndFuture { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<String> future = //有返回结果时用submit threadPool.submit(new Callable<String>(){ @Override public String call() throws Exception { return "Hello"; } }); System.out.println("等待结果"); try { System.out.println("拿到结果" + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } ExecutorService threadPool2 = Executors.newFixedThreadPool(10); CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2); for(int i = 1; i < 10; i++){ final int seq = i; completionService.submit(new Callable<Integer>(){ @Override public Integer call() throws Exception { Thread.sleep(new Random().nextInt(5000)); return seq; } }); } for(int i = 0 ; i < 10; i++){ try { System.out.println(completionService.take().get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); }; } } }
相关文章推荐
- Ubuntu 12.04.1 LTS 系统添加程序启动器
- java微信js SDK页面签名
- 面向东盟优势凸显 互联网金融企业抢滩南宁
- js 对象创建及其继承的方法
- 将sensor_msgs::Image转换为IplImage
- 将sensor_msgs::Image转换为IplImage
- JavaEE 要懂的小事:三、图解Session(会话)
- ucos-ii学习笔记——消息队列的原理及使用
- Verilog的Mac OS端学习--01
- Nginx负载均衡配置实例详解
- JavaEE 要懂的小事:三、图解Session(会话)
- TJU-3980Painting Tree(贪心)
- Eclipse can't install updates
- MFC单文档多视图的切换的3种实现
- [黑马程序员]——IO包的使用
- ucos-ii学习笔记——消息邮箱的原理及使用
- java程序员必须知道的linux服务器命令
- JavaFX横幅类游戏开发 教训 游戏贴图
- 限制 Text Field 输入的内容类型:只允许输入数字
- 创建Maven项目