线程池(ThreadPoolExecutor)分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。

1.什么是线程池

线程池顾名思义是一个线程缓存的‘池子’。线程是稀缺资源,线程如果创建的太多,会消耗系统的资源,还会降低系统的稳定性,所以java中通过线程池来统一管理分配线程这个稀缺的资源,达到资源重复利用。

2.线程池的出现

在web系统中,服务器需要接受大量的并发请求,一个请求就会对应一个线程,如果并发的请求很多,但每个线程执行的时间很短,这样系统就会频繁的创建和销毁线程,系统的性能就会受到影响。那么是否存在一种方式,线程执行任务后并不销毁,而是重复利用?这就是线程池出现的目的。

3.Executor框架

Executor框架是线程池的基础接口,里面定义了一个execute()方法,如下:

void execute(Runnable command);

从方法中看出,execute方法参数是Runnable接口的实现,而Runnable接口是线程实现的接口,所有execute执行的是一个线程任务。

4.ThreadPoolExecutor

ThreadPoolExecutor是线程池实现的关键类,接下来我们分析下线程池的具体实现。

//ctl存储的是线程运行的状态和线程池内有效的线程数量。前3位代表运行状态,后29位
//代表线程数量
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY   = (1 << COUNT_BITS) - 1;

// 这里是线程池中的5种状态
// 运行状态
private static final int RUNNING    = -1 << COUNT_BITS;//111
// 线程池处于该状态时不再接受新任务,但可以继续处理已添加的任务
private static final int SHUTDOWN   =  0 << COUNT_BITS;//000
// 线程池处于该状态时不再接受新任务,也不继续执行已添加任务
private static final int STOP       =  1 << COUNT_BITS;//001
// 线程池处于该状态时,所有任务已终止,ctl任务数量为0
private static final int TIDYING    =  2 << COUNT_BITS;//010
// 线程池彻底终止
private static final int TERMINATED =  3 << COUNT_BITS;//011

// 得到运行状态
private static int runStateOf(int c)     { return c & ~CAPACITY; }
// 得到线程工作数量
private static int workerCountOf(int c)  { return c & CAPACITY; }
private static int ctlOf(int rs, int wc) { return rs | wc; }

4.1线程池创建

  • 线程池ThreadPoolExecutor构造方法
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)

接下来对这些参数做简单说明:

  • corePoolSize: 线程池中的核心线程数
  • maximumPoolSize: 线程池中允许的最大线程数
  • keepAliveTime: 当线程池中的线程数量大于corePool
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值