线程池深入-方法篇(二)

addWorker

线程池中添加工作线程的方法,该方法在池处于运行态且池内工作线程数未达到设定边界时,为线程池添加工作线程。当core参数为true时,边界为最小线程数,反之边界为最大线程数。
在这里插入图片描述
以上循环用于池状态及边界校验,校验成功时触发ctl工作线程数+1并退出循环。
在这里插入图片描述
Worker构造方法内部调用池线程工厂的newThread方法初始化thread字段。worker对象添加到wordkers成功后会触发线程启动,启动成功时返回true,反之触发ctl工作线程数-1并返回false。

addWorkerFailed

在addWorker方法启动线程失败时调用,可以减少ctl中工作线程总数。
在这里插入图片描述

runWorker

线程池中工作线程获取及执行任务的方法,线程启动时通过run方法调用。
在这里插入图片描述
当任务队列不为空时,getTask方法可以从任务队列中获取任务,任务执行前Worker对象加锁可以标记当前线程为非空闲线程(池置为关闭态时需要根据该标记中断线程),beforeExecute与afterExecute无实际操作,留与子类覆写,在任务获取或执行发生异常时,能通过processWorkerExit方法新增工作线程。

getTask

线程池中工作线程获取任务的方法。
在这里插入图片描述
当timed为true时,会通过任务队列poll方法获取任务,反之通过take方法获取,timed受allowCoreThreadTimeOut及corePoolSize控制。

processWorkerExit

线程池中维护工作线程总数的方法。从Worker对象集合中移除w后,根据completedAbruptly判断是否新增线程,当且仅当completedAbruptly为true时,新增一个Worker对象。
在这里插入图片描述

runStateOf

从ctl中提取出池状态。
在这里插入图片描述

workerCountOf

从ctl中提取出池内线程数。
在这里插入图片描述

ctlOf

将池状态与池内线程总数封装为ctl。
在这里插入图片描述
以上三个方法原理已在之前的篇章中说明,本篇不再做详细介绍。详细了解请移步==>ctl

runStateLessThan

判断参数一与参数二大小。当且仅当参数一小于参数二时返回true,反之返回false。
在这里插入图片描述

runStateAtLeast

判断参数一与参数二大小。当且仅当参数一不小于参数二时返回true,反之返回false。
在这里插入图片描述

isRunning

判断参数一与SHUTDOWN大小,当且仅当参数一小于SHUTDOWN时返回true,反之返回false。
在这里插入图片描述

compareAndIncrementWorkerCount

通过CAS为ctl加一,当且仅当CAS操作成功时返回true,反之返回false。
在这里插入图片描述

compareAndDecrementWorkerCount

通过CAS为ctl减一,当且仅当cas成功时返回true,反之返回false。
在这里插入图片描述

decrementWorkerCount

为ctl减一,当且仅当操作成功时退出循环。
在这里插入图片描述

advanceRunState

尝试将池状态转换为参数状态。当且当池状态不低于参数状态或转换成功跳出循环。
在这里插入图片描述

tryTerminate

尝试将池状态转换为终止状态,当转换成功或符合以下条件时跳出循环。
  池处于运行态
  池不低于整理态
  池处于关闭态,且任务队列非空
  池内线程总数不为0
在这里插入图片描述

terminated

无实际操作,留与子类覆写。
在这里插入图片描述

checkShutdownAccess

获取当前池内所有工作线程的修改权限。
在这里插入图片描述

interruptWorkers

中断所有线程。
在这里插入图片描述
w.interruptIfStarted方法可中断还未中断的线程。

interruptIdleWorkers

若参数为true,则中断单个空闲线程。反之中断所有空闲线程。
在这里插入图片描述
当工作线程获取到任务到执行任务前,Worker会进行一次加锁操作,任务执行完成或出错时解锁,因此当线程不空闲时,w.tryLock()返回false,反之返回true。

reject

执行当前拒绝策略。
在这里插入图片描述

onShutdown

无实际操作,留与子类覆写。
在这里插入图片描述

isRunningOrShutdown

判断池是否运行,当池处于关闭态且任会执行任务或处于运行态时返回true,反之返回false。
在这里插入图片描述

drainQueue

返回当前任务队列中任务列表。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早川不爱吃香菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值