java 并发之Callable和Future
来源:互联网 发布:c语言中system 编辑:程序博客网 时间:2024/05/22 08:14
Callable和Future,一个产生结果,一个拿到结果。
(1)一个返回值 。
方式1
package com.thread;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class CallableAndFuture { public static void main(String[] args) {//实现 callable 接口Callable<Integer> callable = new Callable<Integer>() {@Overridepublic Integer call() throws Exception {// TODO Auto-generated method stubreturn new Random().nextInt(100);}};/* FutureTask 实现Future 和 Runnable 接口 * 实现FutureTask 用于接收Callable 返回的值 */ FutureTask<Integer> futureTask = new FutureTask<Integer>(callable); new Thread(futureTask).start(); try {Thread.sleep(5000);System.out.println(futureTask.get());} catch (ExecutionException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}方式2
package com.thread;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class ExecutorServiceAndFuture { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadExecutor(); Future<Integer> future = executorService.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {// TODO Auto-generated method stubreturn new Random().nextInt(100);}}); try {Thread.sleep(5000);System.out.println(future.get());} catch (ExecutionException e) {e.printStackTrace();} catch (InterruptedException e) { e.printStackTrace();} }}
(2)执行多个带返回值的任务
ExecutorService继承自Executor,它的目的是为我们管理Thread对象,从而简化并发编程,Executor使我们无需显示的去管理线程的生命周期,是JDK 5之后启动任务的首选方式。
package com.thread;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;public class ExcutorServiceAndCompletionService { public static void main(String[] args) { ExecutorService executorService =Executors.newCachedThreadPool(); CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(executorService); for(int i=0; i<5;i++){ final int taskID=i; cs.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {return taskID;}}); } for(int i=0;i<5;i++){ try {System.out.println(cs.take().get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();} }}}
0 0
- java 并发之Callable和Future
- Java并发之Callable、Future
- Java并发编程-Executor框架之Callable和Future接口
- Java并发编程之线程池、Callable和Future使用
- Java并发编程-Executor框架之Callable和Future接口
- Java并发之Future类和Callable类详解
- Java并发编程之Callable,Future,FutureTask
- Java并发——Callable和Future
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- CreateFile函数解释
- 国行三星Note3已开始推送安卓4.4.2更新
- 我开发的第一款HTML5游戏《驴子跳》
- Java 8中的Lambda表达式
- ImportError: No module named BeautifulSoup
- java 并发之Callable和Future
- 浅谈C++编译原理
- Sharepoint中有关文件夹的操作
- C++中const用法总结
- 诺基亚X行货版24日上市:零售价699元
- 十六进制转八进制
- 2014年3月20号-Unity教育行业解决方案应用暨创意教学展示会
- 广度优先遍历代码
- OpenStack Cinder服务启动过程中的资源加载和扩展源码解析之一