线程池的部分源码解析注释(2)

这篇博客详细解读了Java线程池中execute方法的工作流程,包括如何添加核心线程、任务放入工作队列以及判断线程池状态的逻辑。同时,提到了addWorker方法在创建线程执行任务中的作用,以及Worker的runWorker方法在运行过程中的关键角色。
摘要由CSDN通过智能技术生成

线程池的execute方法

public void execute(Runnable command) { 

// 健壮性判断,非空校验 

if (command == null) throw new NullPointerException(); 

// 获取到核心参数ctl int c = ctl.get(); 

// 获取当前工作线程数量,判断是否小于核心线程数 

if (workerCountOf(c) < corePoolSize) { 

// 添加一个核心线程去执行任务

 if (addWorker(command, true)) 

// 如果核心线程添加成功,返回true,添加失败返回false // 结束!

 return;

 // 添加核心线程失败,因为ctl有变化,需要重新获取

ctl c = ctl.get();

// 判断是否是RUNNING,将任务添加到工作队列中排队。 

if (isRunning(c) && workQueue.offer(command)) { 

// 成功添加任务到队列后,重新获取ctl int recheck = ctl.get(); // 如果不是RUNNING,将任务从队列移除 

if (!isRunning(recheck) && remove(command)) 

// 走拒绝策略 reject(command); // 如果是RUNNING状态,判断是否工作线程数为0 

else if (workerCountOf(recheck) == 0)

 // 添加一个空任务线程,(非核心线程)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值