![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程相关
文章平均质量分 92
乘风破浪zxz
这个作者很懒,什么都没留下…
展开
-
线程池ThreadPoolExecutor源码分析(二)--ThreadPoolExecutor添加任务工作单元addWorker()
addWorker()主要分两个部分:第一部分双重循环的目的是判断线程池的状态,若是当前线程池可以创建线程则通过 CAS 操作增加线程数;第二部分主要是把并发安全的任务加到 workers 里面,并且启动任务执行private boolean addWorker(Runnable firstTask, boolean core) { retry: for (;;) { int c = ctl.get(); int rs .原创 2020-08-18 12:48:08 · 302 阅读 · 0 评论 -
线程池ThreadPoolExecutor源码分析(一)--ThreadPoolExecutor属性分析
线程池ThreadPoolExecutor源码分析(一)–ThreadPoolExecutor属性分析 //ctl -> 高3位:表示当前线程池的运行状态 除去高三位之后的低位:表示当前线程中所拥有的线程数量 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); //Integer.SIZE == 32 COUNT_BITS 是用于存放线程数量的那些位 在当前jdk版本中是29位原创 2020-08-17 20:31:20 · 245 阅读 · 0 评论 -
FutureTask源码阅读
FutureTask的类关系图由上图可知FutureTask类实现了RunnableFuture接口,而RunnableFuture接口又分别继承了两个接口Runnable与FutureRunnable接口我们很是熟悉呀,我们开启一个线程的方式之一就需要实现这个Runnable,Runnable并不能开启线程,只是我们用来存放我们的处理业务逻辑的地方!Future接口中定义了get()、isDone()等方法,Future接口需要配合Callable接口可以实现,具有返回指定泛型的线程方式!简单应原创 2020-08-17 13:13:31 · 132 阅读 · 0 评论