java多线程学习笔记:使用Callable和Future
2016-04-02 10:07
609 查看
Callable 和 Runable接口相似, 但是实现了Runable接口的线程运行结束后无法返回值, 而Callable 可以返回值,由Future 可以拿到返回值,通过下面的例子可以展示Callable和 Future的使用场景:
FutureTask 实现了Future 和 Runnable接口,因此实例化后可以用来构造线程,通过Future的get()方法可以拿到线程运行后返回的值。也可以结合线程池使用。
学习来源:/article/1391640.html
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的get()方法可以拿到线程运行后返回的值。也可以结合线程池使用。
public class CallableAndFuture { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<Integer> future = threadPool.submit(new Callable<Integer>() { //submit 返回一个实现了Future接口的对象 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(); } } }
学习来源:/article/1391640.html
相关文章推荐
- java缓存基本原理
- spring常用的工具类
- Java垃圾回收机制
- 【java】向上转型和向下转型
- struts2请求跳转到外部链接
- SpringMvc项目分析
- eclipse如何修改dynamic web module version
- springMVC整合xStream
- springMVC4(5)RestTemplate控制层单元测试
- java基础知识点总结(三)
- Javase之字符串
- 事件处理(Java核心技术卷Ⅰ)
- java虚拟机 jvm 出入java栈 栈空间内存分配
- java虚拟机 jvm 出入java栈 栈空间内存分配
- 20145304 第五周Java学习报告
- 一天一个Java基础——反射
- CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件
- java 继承中构造方法和类成员方法间的关系
- Spring 注解
- Eclipse编写ExtJS卡死问题 eclise js验证取消