Skip to content

Commit 9846828

Browse files
committed
更新多线程 - 线程池
1 parent f2a4887 commit 9846828

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

MD/Java基础-多线程.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,30 @@ new Thread弊端:
6565
* 线程缺乏统一管理,可以无限制的新建线程,导致OOM。线程池可以控制可以创建、执行的最大并发线程数。
6666
* 缺少工程实践的一些高级的功能如定期执行、线程中断。线程池提供定期执行、并发数控制功能
6767

68-
[http://www.wangtianyi.top/blog/2018/05/08/javagao-bing-fa-wu-xian-cheng-chi/](http://www.wangtianyi.top/blog/2018/05/08/javagao-bing-fa-wu-xian-cheng-chi/)
69-
[https://www.jianshu.com/p/edd7cb4eafa0](https://www.jianshu.com/p/edd7cb4eafa0)
68+
#### 线程池时核心参数
69+
70+
* corePoolSize:核心线程数量,线程池中应该常驻的线程数量
71+
* maximumPoolSize:线程池允许的最大线程数,非核心线程在超时之后会被清除
72+
* workQueue:阻塞队列,存储等待执行的任务
73+
* keepAliveTime:线程没有任务执行时可以保持的时间
74+
* unit:时间单位
75+
* threadFactory:线程工厂,来创建线程
76+
* rejectHandler:当拒绝任务提交时的策略(抛异常、用调用者所在的线程执行任务、丢弃队列中第一个任务执行当前任务、直接丢弃任务)
77+
78+
#### 创建线程的逻辑
79+
以下任务提交逻辑来自ThreadPoolExecutor.execute方法:
80+
81+
1. 如果运行的线程数 < corePoolSize,直接创建新线程,即使有其他线程是空闲的
82+
2. 如果运行的线程数 >= corePoolSize
83+
2.1 如果插入队列成功,则完成本次任务提交,但不创建新线程
84+
2.2 如果插入队列失败,说明队列满了
85+
2.2.1 如果当前线程数 < maximumPoolSize,创建新的线程放到线程池中
86+
2.2.2 如果当前线程数 >= maximumPoolSize,会执行指定的拒绝策略
87+
88+
#### [阻塞队列的策略](https://blog.csdn.net/hayre/article/details/53291712)
89+
* 直接提交。SynchronousQueue,它将任务直接提交给线程而不保持它们。如果不存在可用于立即运行任务的线程,则试图把任务加入队列将失败,因此会构造一个新的线程。此策略可以避免在处理可能具有内部依赖性的请求集时出现锁。直接提交通常要求无界maximumPoolSizes 以避免拒绝新提交的任务。
90+
* 无界队列。使用无界队列(例如,不具有预定义容量的 LinkedBlockingQueue)将导致在所有 corePoolSize线程都忙时新任务在队列中等待。这样,创建的线程就不会超过 corePoolSize。(因此,maximumPoolSize的值也就无效了。)当每个任务完全独立于其他任务,即任务执行互不影响时,适合于使用无界队列;例如,在 Web页服务器中。这种排队可用于处理瞬态突发请求,当命令以超过队列所能处理的平均数连续到达时,此策略允许无界线程具有增长的可能性。
91+
* 有界队列。当使用有限的 maximumPoolSizes 时,有界队列(如ArrayBlockingQueue)有助于防止资源耗尽,但是可能较难调整和控制。队列大小和最大池大小可能需要相互折衷:使用大型队列和小型池可以最大限度地降低CPU 使用率、操作系统资源和上下文切换开销,但是可能导致人工降低吞吐量。如果任务频繁阻塞(例如,如果它们是 I/O边界),则系统可能为超过您许可的更多线程安排时间。使用小型队列通常要求较大的池大小,CPU使用率较高,但是可能遇到不可接受的调度开销,这样也会降低吞吐量。
7092

7193
### 并发包工具类
7294
[http://www.wangtianyi.top/blog/2018/05/01/javagao-bing-fa-xi-lie-si-:juc/](http://www.wangtianyi.top/blog/2018/05/01/javagao-bing-fa-xi-lie-si-:juc/)

0 commit comments

Comments
 (0)