Java ExecutorService

更多 Java 并发编程方面的文章,请参见文集《Java 并发编程》


ExecutorService

  • Java 5 开始提供
  • ExecutorService 为一个接口
  • 实际上使用的是实现类 Executors

使用 ExecutorService 对比 使用 Thread 的优势

  • ExecutorService 使用了线程池 Thread Pool,用户不需要去关心线程的创建
  • 由于使用了线程池,ExecutorService 更加节省资源
  • ExecutorService 使用异步方式管理线程
  • ExecutorService 的 submit() 方法可以传入一个 Callable 实例,得到返回结果 Future<T>
  • invokeAll() 方法和 invokeAny() 方法 可以批量控制线程的启动
    • public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
      同时启动所有线程,返回所有线程的结果 Future<T>
    • public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
      同时启动所有线程,返回其中一个线程的结果
  • shutdown() 方法和 shutdownNow() 方法 可以批量控制线程的关闭
    • shutdown():allow previously submitted tasks to execute before terminating 等待之前提交的任务执行完
    • shutdownNow():prevents waiting tasks from starting and attempts to stop currently executing tasks 不会等待之前提交的任务执行完

submit() 方法 VS execute() 方法

  • execute() 方法只能传入 Runnable 实例
  • submit() 方法即可以传入 Runnable 实例,也可以传入 Callable 实例,得到返回结果 Future<T>

具体的使用,请参考 Java 实现多线程的三种方式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,477评论 19 139
  • 个人笔记,方便自己查阅使用 Contents Java LangAssignment, ReferenceData...
    freenik阅读 5,229评论 0 6
  • 译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.j...
    高广超阅读 10,648评论 1 68
  • 记忆中,毛豆总是和夏天联系在一起。和爷爷边看电视边剥毛豆的场景历历在目,特别温馨。一盘翠油油的毛豆,经奶奶...
    mango大人阅读 2,312评论 0 0
  • 说在前面:未来的企业管理不再是混沌模糊的,也不是死板的只讲秩序,而是要找到一个中间状态,并打破原有的秩序,这样企业...
    柠C小姐阅读 3,701评论 2 4