Callable和Future
来源:互联网 发布:吉林11选5遗漏数据 编辑:程序博客网 时间:2024/06/05 17:07
java.util.concurrent
提供Callable
和Future
接口.
我们知道Runnable
接口无法返回线程执行的结果,而Callable
可以解决该问题,其返回值可以被Future
捕捉到,换句话说,Future
可以获得异步任务的返回值.
public class CallableAndFuture { public static void main(String[] args) { Callable<Integer> callable = new Callable<Integer>() { public Integer call() throws Exception { return new Random().nextInt(100); } }; FutureTask<Integer> future = new FutureTask<Integer>(callable); new Thread(future).start(); try { Thread.sleep(5000);// 可能做一些事情 System.out.println(future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }}
FutureTask
实现Future
和Runnable
接口,这种结合带来什么好处呢,假如有个很耗时的返回值需要计算,并且这个返回值不是立刻需要的话,我们可以利用该组合;使用其他线程来计算返回值,而当前线程在使用返回值前可以执行其他操作,等需要这个返回值时,通过Future
得到.
另外我们还可以通过ExecutorService来使用Future和Callable
public class CallableAndFuture { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<Integer> future = threadPool.submit(new Callable<Integer>() { public Integer call() throws Exception { return new Random().nextInt(100); } }); try { Thread.sleep(5000);// 可能做一些事情 System.out.println(future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } threadPool.shutdown(); }}
0 0
- java callable和Future
- 多线程Callable和Future
- 线程--Callable和Future
- Callable和Future
- Callable和Future
- Callable、Future和CompletionService
- Callable和Future
- Callable和Future
- Callable和Future简介
- Callable和Future浅析
- Callable和Future
- Future和Callable
- Future和Callable
- Callable和Future
- Callable、Future和FutureTask
- Callable、Future和CompletionService
- Callable和Future
- Callable和Future
- Android-Handler 总结(Handler 的使用 ,Looper , MessageQueue , HandlerThread )
- Java员工管理系统(控制台输出)
- Android多线程断点下载
- Redis零起点-探索Redis,学习Redis基础用法
- 最大公约数
- Callable和Future
- Objective-C:instancetype与id
- 欢迎使用CSDN-markdown编辑器
- C++标准库bind函数
- [网络流24题] 20 深海机器人 (线性规划网络优化 ,最小费用最大流)
- 磁盘等存储设备及常见问题 浅析
- 20150903 Java学习笔记之继承性
- STL中各个容器的底层数据结构
- 顺序栈和链栈的初始化插入和删除