线程池之ThreadPoolExecutor源码解析
2024-09-05 23:15:52
1.变量
ThreadPoolExecutor先定义了这几个常量,初看时一脸懵逼,其实它就是用int的二进制高三位来表示线程池的状态,
先回顾一下位运算:
- <<’左移:右边空出的位置补0,其值相当于乘以2。
- ‘>>’右移:左边空出的位,如果是正数则补0,若为负数则补0或1,取决于所用的计算机系统OS X中补1。其值相当于除以2。
- 负数二进制由它的绝对值取反后加1
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
private static final int COUNT_BITS = Integer.SIZE - 3;// 29
private static final int CAPACITY = (1 << COUNT_BITS) - 1; // 1<<29=00100000 00000000 00000000 00000000 再减1=00011111 11111111 11111111 11111111
// 1的二进制是001,取反是110,再加1是111,111就是-1的二进制,再左移29,
private static final int RUNNING = -1 << COUNT_BITS;// 00000 00000000 00000000 00000000
private static final int SHUTDOWN = 0 << COUNT_BITS;// 00000 00000000 00000000 00000000
private static final int STOP = 1 << COUNT_BITS;// 00000 00000000 00000000 00000000
private static final int TIDYING = 2 << COUNT_BITS;// 00000 00000000 00000000 00000000
private static final int TERMINATED = 3 << COUNT_BITS;// 00000 00000000 00000000 00000000
最新文章
- iOS 与 惯性滚动
- 服务端JavaScript之Rhino
- 关于EEG参考电极
- Play on Words 欧拉通路(回路)判断
- CSS 之 margin知识点
- iframe自适应高度的问题
- Unicode字符列表
- js 加载初始化日期
- 201521123027 《JAVA程序设计》第3周学习总结
- 两天快速开发一个自己的微信小程序
- diff和patch命令(1)
- Tutorial 02_熟悉常用的HDFS操作
- CentOS 7的安装详解
- VS2015+Opencv3.2配置(一次配好)
- Java中sleep方法和wait的详细区别
- 汽车车牌JS正则表达式验证(含新能源车牌)
- JavaScript调试小技巧
- Nested Prefab Mode 嵌套预制体 保存问题 Dirty
- Harbor配置https,并安装内容信任插件(notary)
- docker——镜像(image)
热门文章
- ssh_exchange_identification: read: Connection reset by peer解决办法
- spark复习笔记(4):RDD变换
- mongoDB关系型数据库的对比
- 表格类型数据,Excel csv导入,导出操作
- 微信支付签名算法JavaScript版,参数名ASCII码从小到大排序;0,A,B,a,b;
- Jupyter Notebook 安装与使用
- 解决Debug JDK source 无法查看局部变量的问题方案
- NODE升级到V12.X.X
- TextView控件常用属性
- centos 配置vlan