《Java并发库系列四》一newFixedThreadPool

举报
香菜聊游戏 发表于 2021/07/15 00:49:48 2021/07/15
【摘要】 1、API介绍 Executors.newFixedThreadPool(10),创建一个固定大小的线程池。 两个构造方法 Executors.newFixedThreadPool(10); Executors.newFixedThreadPool(10,Executors.defaultThreadFactory()); 一个线程数量coreSize 一个线程数...

1、API介绍

Executors.newFixedThreadPool(10),创建一个固定大小的线程池。

两个构造方法

Executors.newFixedThreadPool(10);

Executors.newFixedThreadPool(10,Executors.defaultThreadFactory());

一个线程数量coreSize

一个线程数量,一个线程factory ThreadFactory

2、线程池逻辑:

1、当线程池的的正在运行线程数量 小于 coreSize 的时候,提交新的任务,会生成新的线程,直到最大值coreSize。

2、如果任务能成功的加入到队列中,需要重新检测,因为可能存活的线程已经结束或者线程池关闭了,这时候拒绝这个任务

 

注意:只有在提交任务的时候才会创建新的任务。创建了一个10个线程的线程池,提交了3个任务,运行的时候生成了三个线程。

 


  
  1. ExecutorService executorService = Executors.newFixedThreadPool(10);
  2. executorService.submit(()-> System.out.println("1111111111111111111111"));
  3. executorService.submit(()-> System.out.println("222222222222222222"));
  4. executorService.submit(()-> System.out.println("3333333333333333333333"));

3、题外话:移位操作和位运算

 


  
  1. private static final int COUNT_BITS = Integer.SIZE - 3;
  2. private static final int CAPACITY = (1 << COUNT_BITS) - 1;
  3. private static int workerCountOf(int c) { return c & CAPACITY; }

 

 

移位操作似乎很多程序不会。

<< 右移操作相当于*2的n次方

& 同为1 取1 其他取0

<< 右移操作,会在左边补全0,例如1 右移2为 变为 100

CAPACITY -1 会将所有的位数变为11,

在& 的时候会屏蔽超过这个CAPACITY -1 的值,相当于取Math.min(CAPACITY -1,c)

 

 

 

 

欢迎转载,我是香菜,谢谢。欢迎加入QQ群:632603498,一起学习

 

 

 

文章来源: gamwatcher.blog.csdn.net,作者:香菜聊游戏,版权归原作者所有,如需转载,请联系作者。

原文链接:gamwatcher.blog.csdn.net/article/details/88822083

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。