Skip to content

Commit 4edd4c2

Browse files
committed
线程池学习总结
1 parent 4f7cf07 commit 4edd4c2

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
* **[Java 并发进阶常见面试题总结](docs/java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions.md)**
9393
* [并发容器总结](docs/java/Multithread/并发容器总结.md)
9494
* **[Java线程池学习总结](./docs/java/Multithread/java线程池学习总结.md)**
95-
* [(待办)如何确定线程池线程数量?]()
95+
* [如何确定线程池线程数量?]()
9696

9797
* [乐观锁与悲观锁](docs/essential-content-for-interview/面试必备之乐观锁与悲观锁.md)
9898
* [JUC 中的 Atomic 原子类总结](docs/java/Multithread/Atomic.md)

docs/java/Multithread/java线程池学习总结.md

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,14 @@ public class ScheduledThreadPoolExecutor
121121
/**
122122
* 用给定的初始参数创建一个新的ThreadPoolExecutor。
123123
*/
124-
public ThreadPoolExecutor(int corePoolSize,
125-
int maximumPoolSize,
126-
long keepAliveTime,
127-
TimeUnit unit,
128-
BlockingQueue<Runnable> workQueue,
129-
ThreadFactory threadFactory,
130-
RejectedExecutionHandler handler) {
124+
public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量
125+
int maximumPoolSize,//线程池的最大线程数
126+
long keepAliveTime,//当线程数大于核心线程数时,多余的空闲线程存活的最长时间
127+
TimeUnit unit,//时间单位
128+
BlockingQueue<Runnable> workQueue,//任务队列,用来储存等待执行任务的队列
129+
ThreadFactory threadFactory,//线程工厂,用来创建线程,一般默认即可
130+
RejectedExecutionHandler handler//拒绝策略,当提交的任务过多而不能及时处理时,我们可以定制策略来处理任务
131+
) {
131132
if (corePoolSize < 0 ||
132133
maximumPoolSize <= 0 ||
133134
maximumPoolSize < corePoolSize ||
@@ -168,7 +169,9 @@ public class ScheduledThreadPoolExecutor
168169
- **`ThreadPoolExecutor.DiscardPolicy`** 不处理新任务,直接丢弃掉。
169170
- **`ThreadPoolExecutor.DiscardOldestPolicy`** 此策略将丢弃最早的未处理的任务请求。
170171

171-
举个例子: Spring 通过 `ThreadPoolTaskExecutor` 或者我们直接通过 `ThreadPoolExecutor` 的构造函数创建线程池的时候,当我们不指定 `RejectedExecutionHandler` 饱和策略的话来配置线程池的时候默认使用的是 `ThreadPoolExecutor.AbortPolicy`。在默认情况下,`ThreadPoolExecutor` 将抛出 `RejectedExecutionException` 来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。 对于可伸缩的应用程序,建议使用 `ThreadPoolExecutor.CallerRunsPolicy`。当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看 `ThreadPoolExecutor` 的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了。)
172+
举个例子:
173+
174+
> Spring 通过 `ThreadPoolTaskExecutor` 或者我们直接通过 `ThreadPoolExecutor` 的构造函数创建线程池的时候,当我们不指定 `RejectedExecutionHandler` 饱和策略的话来配置线程池的时候默认使用的是 `ThreadPoolExecutor.AbortPolicy`。在默认情况下,`ThreadPoolExecutor` 将抛出 `RejectedExecutionException` 来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。 对于可伸缩的应用程序,建议使用 `ThreadPoolExecutor.CallerRunsPolicy`。当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看 `ThreadPoolExecutor` 的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了。)
172175
173176
### 3.2 推荐使用 `ThreadPoolExecutor` 构造函数创建线程池
174177

0 commit comments

Comments
 (0)