ExecutorService 执行完Callable 任务后,返回 Future 对象,Future 对象表示一个任务的生命周期,包含任务的状态和任务的结果对象。

Future的get方法可以获得 Callable任务执行后的结果,isDone, isCanceled 方法判断线程状态。

使用也很简单,

public class CallableTest implements Callable<String> {public static void main(String args[]) {ExecutorService executor = Executors.newFixedThreadPool(20);List<Future<String>> list = new ArrayList<Future<String>>();Callable<String> callable = new CallableTest();for (int i=0; i<100; i++) {Future<String> future = executor.submit(callable);list.add(future);}for (Future<String> future : list) {try {// Future.get() 方法会等待线程结束System.out.println(future.get());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}}// 结束线程池executor.shutdown();}@Overridepublic String call() throws Exception {TimeUnit.SECONDS.sleep(2);return Thread.currentThread().getName();}
}

Java 并发编程之 Callable 和 Future相关推荐

  1. Java多线程之Callable、Future和FutureTask

    Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...

  2. zbb20180929 thread java并发编程之Condition

    java并发编程之Condition 引言 在java中,对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout ...

  3. 15、Java并发编程:Callable、Future和FutureTask

    Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...

  4. java并发编程之4——Java锁分解锁分段技术

    转载自 java并发编程之4--Java锁分解锁分段技术 并发编程的所有问题,最后都转换成了,"有状态bean"的状态的同步与互斥修改问题.而最后提出的解决"有状态bea ...

  5. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  6. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  7. Java并发编程之CAS第三篇-CAS的缺点

    Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...

  8. Java并发编程之CyclicBarrier详解

    简介 栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生.栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行.闭锁用于等待事件,而栅栏用于等待其他线程. CyclicBarrier ...

  9. Java并发编程:Callable、Future和FutureTask

    在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就 ...

最新文章

  1. (转)使用 /proc 文件系统来访问 Linux 内核的内容
  2. Hashtable源码注释
  3. 组合表头_单双斜线表头——520,想单就单,想双就双
  4. [渝粤教育] 莆田学院 电机与拖动基础(一) 参考 资料
  5. html5表单密码验证及提示,HTML5表单及其验证(示例代码)
  6. 深入了解Struts2返回JSON数据的原理及具体应用范例
  7. 大话集群和负载均衡,太强了!
  8. 我的WCF之旅(10):如何在WCF进行Exception Handling
  9. GB28181协议之录像回放
  10. Unity3D开发体验
  11. 写在博士旅程之前|博士第一年|博士第三年|博士第四年
  12. WPF快速学习--一布局
  13. YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性
  14. 电脑实时监控信息:CPU 内存 GPU使用率在桌面上动态展现
  15. 小红书3大新功能上线,提升笔记转化率和品牌投放效果
  16. 客户流失预测 —— 资源汇总
  17. STM32G474RE DAC+OPAMP
  18. 假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和7升。问题是如何只用这2个水壶从池塘里取得6升的水?
  19. ERP服务器性能改善,ERP系统的性能优化及其实现
  20. Linux分区大小调整

热门文章

  1. 【英语学习】【WOTD】magniloquent 释义/词源/示例
  2. 自定义控件之绘图篇(三):区域(Range)
  3. vue保存页面的值_vue中使用localStorage存储信息
  4. requests爬取免费代理2
  5. Unity3D 的物理渲染和光照模型
  6. Java中各种对象的各种实例化方式
  7. Python爬虫--- 1.2 BS4库的安装与使用
  8. 生产计划管理制造系统模块化
  9. Oracle的 MODEL 查询
  10. FBI曾要求加密服务商Lavabit监视斯诺登邮件