线程池的理解-----源码学习。(1基础概念讲解)

2022-3-22 特殊的日子里,最近世界布满阴霾。愿国泰民安,世界和平!

一.线程池的创建方式:

1.继承Thread类

2.实现Runnable接口

3.实现callable有返回(返回。异常)

4.线程池ThreadPoolExecutor

二.线程池中的7个核心参数(常识)

public ThreadPoolExecutor(int corePoolSize, // 核心线程数

int maximumPoolSize, // 最大线程数

long keepAliveTime, // 最大线程数空闲时间

TimeUnit unit, // 空闲时间

BlockingQueue<Runnable> workQueue, // 工作队列

ThreadFactory threadFactory, // 线程工厂(构建线程,需要指定线程的信息)

RejectedExecutionHandler handler) {} // 拒绝策略

三。线程池的状态

RUNNING 运行状态,正常接受任务,处理workQueue里的任务。

SHUTDOWN 调用了shutdown()方法。不会接受新的任务,可以处理workQueue里的任务。

STOP 调用了shutdown()方法时,不会接受新的任务,不会处理workQueue里的任务,正在执行的任务也要中断。

tidyingTIDYING 过渡状态,意味着线程池准备好一切,可以结束了。

TERMINATED 终止状态 在经过tidying状态后,执行terminated()方法就进入终止状态。

四。ThreadPoolExector核心属性。

//ctl是线程的核心参数,描述俩个线程池状态和线程中工作线程的数量

//int类型 32为bit位标识。高三位为线程池状态,低29位为线程池数量

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

//线程池最大容量 32-3=29

private static final int COUNT_BITS = Integer.SIZE - 3;

// 线程池状态的计算 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, 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; } 

// 得到低29位的数据,拿线程池工作线程数量 

private static int workerCountOf(int c) { return c & CAPACITY; }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值