1
Helsing 2023-10-01 18:04:57 +08:00 via iPhone
看源码吧,其实并没有核心线程和非核心线程的区分,你设置了几个核心线程,线程池就在已经创建的线程中,保留几个线程不销毁,就这么简单。
核心线程和非核心线程就是一种线程。 |
2
lingalonely 2023-10-01 18:10:08 +08:00
不存在指定的核心线程,只要保持线程池的线程数到指定数量就行,其他多余的拿出来回收掉
|
3
trzzzz OP 谢谢
|
4
sujin190 2023-10-01 20:18:31 +08:00 via Android
最小线程数吧,你哪看的核心非核心?超过最小线程数的线程在超过空闲时间后销毁吧
|
5
trzzzz OP @sujin190 线程池第一个参数 corePoolSize ,正常理解的话是核心线程数。寻思 core 也没最小的翻译把
|
6
Euthpic 2023-10-01 20:46:06 +08:00 via Android
让你来设计的话,你会关心一个线程是核心的还是非核心的吗?只需关心池内的线程数量就行。核心线程数,最大线程数,其实也就是这个池子的下界和上界而已
|
7
trzzzz OP @Euthpic 看了源码,核心、最大只是逻辑概念,没有明确说先创建的就是核心线程,后面就是非核心线程,里面线程谁都可能在 keepAlive 后被回收
|
8
sujin190 2023-10-01 21:02:55 +08:00 via Android
@trzzzz 这命名有问题,线程都是一样的,其实就是线程池最小线程数的逻辑,和连接池最小连接数事一样的
|
9
trzzzz OP @sujin190 我之前说的有点问题。看了一些博客和楼中其他人回答,所谓的核心线程数也就是线程池的最小线程数。druid 配置有最小最大连接数我想也和线程池的差不多
|
10
wzcloud 2023-10-01 21:28:19 +08:00
源码没有区分核心非核心,只是在执行方法时会传递一个 bool 值类型的参数,如果为 true,则调用队列的阻塞方法,否则调用超时等待方法(如果超时没获取到数据,则线程结束--相当于关闭了非核心线程)
|
11
Ericcccccccc 2023-10-01 21:49:18 +08:00
这就好像假设你需要身上保留 10 块钱, 你先有了 10 块后来又获得 10 块, 这下需要把 10 块花出去难道还要区分先获得的 10 块还是后获得的 10 块吗?
|
12
Belmode 2023-10-02 15:07:17 +08:00 via Android
corePoolSize 应该理解成“最少存活线程数”吧
|
13
ikas 2023-10-02 16:20:40 +08:00
需要配合 allowsCoreThreadTimeOut 参数
如果设置 false,那么 core 线程就是最开始的生成的那几个线程 |
15
ikas 2023-10-02 17:59:16 +08:00
设置 core size 为 0?
|