[@炯轩][¥20]线程池的execute方法是线程安全的吗?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[@炯轩][¥20]线程池的execute方法是线程安全的吗?

2018-12-14 21:54:14 2953 1

线程池(ThreadPoolExecutor)的execute方法如下,该方法在执行了读取语句:

int c = ctl.get()

后,执行了比较:

if (workerCountOf(c) < corePoolSize)

这两句之间没有添加任何保护线程安全的方法,所以execute是如何实现线程安全的呢?

public void execute(Runnable command) {

if (command == null)

throw new NullPointerException();

int c = ctl.get();

if (workerCountOf(c) < corePoolSize) {

if (addWorker(command, true))
return;

c = ctl.get();

}

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

int recheck = ctl.get();

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

reject(command);

else if (workerCountOf(recheck) == 0)

addWorker(null, false);

}

else if (!addWorker(command, false))

reject(command);

}

取消 提交回答
全部回答(1)
  • wangccsy
    2019-07-17 23:21:37
    工作线程数小于核心线程数时,直接新建核心线程执行任务;
    大于核心线程数时,将任务添加进等待队列;
    队列满时,创建非核心线程执行任务;
    工作线程数大于最大线程数时,拒绝任务
    
    0 0
相关问答

1

回答

MapState 是线程安全的吗?

2022-09-23 11:14:58 519浏览量 回答数 1

1

回答

Spring框架中的单例bean是线程安全的吗?

2022-03-31 19:18:10 512浏览量 回答数 1

0

回答

为什么不建议用 Executors 创建线程池?

2021-11-04 15:54:59 585浏览量 回答数 0

1

回答

Hibernate中SessionFactory是线程安全的吗?

2021-10-27 11:29:42 217浏览量 回答数 1

1

回答

使用Executors创建线程池会造成什么问题?

2021-03-02 18:19:20 309浏览量 回答数 1

1

回答

为什么 Executors 创建线程池有可能会发生OOM

2020-12-27 18:47:13 1087浏览量 回答数 1

1

回答

为什么阿里巴巴禁止使用 Executors 创建线程池

2020-12-27 18:45:15 753浏览量 回答数 1

1

回答

MySQL 里面如何线程安全地实现 query and update

2020-04-25 14:04:54 578浏览量 回答数 1

1

回答

[@wangccsy][¥20]Swing 是线程安全的?

2018-12-13 14:13:43 1436浏览量 回答数 1

1

回答

请教关于php线程安全的问题

2016-06-12 18:05:56 1908浏览量 回答数 1
+关注
月下丶
半生在结冰,半生在融化,一辈子都在学习长大
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载