Java线程池"Executors"

本篇文章介绍线程池工厂类Executors, 但是实际开发中已经不允许使用该类去创建线程池, 可参考"阿里Java开发规范"的说明:


image.png

Executors的几种创建线程池的方法:

1. 创建一个单线程的线程池

public static ExecutorService newSingleThreadExecutor(){}
特点:
1.单线程的线程池是按照FIFO顺序执行的
2.线程池中唯一的线程存活时间是无限的
3.当池中的线程忙碌时新提交的线程会进入内部的阻塞队列中,并且阻塞队列是无界的无界队列有可能使服务器资源耗尽

关闭线程池

public void shutdown(): 调用后线程池状态为SHUTDOWN,不能在添加新的任务,否则抛出异常RejectedExecutionException. 等待原池中任务执行完线程池才会退出.
public List<Runnable> shutdownNow(): 线程池状态立即变为STOP,并且停止所有正在执行的线程. 在阻塞队列中的任务会被返回.

2. 创建固定数量的线程池

public static ExecutorService newSingleThreadExecutor(int threads)

3. 创建可缓存的线程池

Executors.newCachedThreadPool()
特点:
1.线程池没有大小限制,受限于操作系统或JVM参数控制.
2.池中空闲线程超过60秒就会被回收.
弊端:
1.线程池没有最大数量限制,有资源耗尽风险

4.可调度线程池

一个可以提供"延迟"和"周期性"任务调度功能的线程池ScheduledExecutorServic.

创建方法

public void newSingleThreadScheduledExecutor(): 创建一个可调度线程池, 池中仅含有一个线程
public void newSingleThreadScheduledExecutor(int corePoolSize): 创建一个可调度线程池,池中线程数由参数控制

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

推荐阅读更多精彩内容

  • 目前的工作是接触大数据相关的内容,自己也缺少高并发的知识,刚好前几天看了flume的源码,里面也用到了各种线程池内...
    等一夏_81f7阅读 1,473评论 0 0
  • 使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个...
    脆皮鸡大虾阅读 553评论 2 0
  • 前言 声明:该文章中所有测试都是在JDK1.8的环境下。 该文章是我在学习Java中的多线程这方面知识时,做的一些...
    GG_龙马阅读 191评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,625评论 28 53
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,816评论 3 8