
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? |