mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
线程池学习总结
This commit is contained in:
parent
4f7cf07791
commit
4edd4c27ed
@ -92,7 +92,7 @@
|
|||||||
* **[Java 并发进阶常见面试题总结](docs/java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions.md)**
|
* **[Java 并发进阶常见面试题总结](docs/java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions.md)**
|
||||||
* [并发容器总结](docs/java/Multithread/并发容器总结.md)
|
* [并发容器总结](docs/java/Multithread/并发容器总结.md)
|
||||||
* **[Java线程池学习总结](./docs/java/Multithread/java线程池学习总结.md)**
|
* **[Java线程池学习总结](./docs/java/Multithread/java线程池学习总结.md)**
|
||||||
* [(待办)如何确定线程池线程数量?]()
|
* [如何确定线程池线程数量?]()
|
||||||
|
|
||||||
* [乐观锁与悲观锁](docs/essential-content-for-interview/面试必备之乐观锁与悲观锁.md)
|
* [乐观锁与悲观锁](docs/essential-content-for-interview/面试必备之乐观锁与悲观锁.md)
|
||||||
* [JUC 中的 Atomic 原子类总结](docs/java/Multithread/Atomic.md)
|
* [JUC 中的 Atomic 原子类总结](docs/java/Multithread/Atomic.md)
|
||||||
|
@ -121,13 +121,14 @@ public class ScheduledThreadPoolExecutor
|
|||||||
/**
|
/**
|
||||||
* 用给定的初始参数创建一个新的ThreadPoolExecutor。
|
* 用给定的初始参数创建一个新的ThreadPoolExecutor。
|
||||||
*/
|
*/
|
||||||
public ThreadPoolExecutor(int corePoolSize,
|
public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量
|
||||||
int maximumPoolSize,
|
int maximumPoolSize,//线程池的最大线程数
|
||||||
long keepAliveTime,
|
long keepAliveTime,//当线程数大于核心线程数时,多余的空闲线程存活的最长时间
|
||||||
TimeUnit unit,
|
TimeUnit unit,//时间单位
|
||||||
BlockingQueue<Runnable> workQueue,
|
BlockingQueue<Runnable> workQueue,//任务队列,用来储存等待执行任务的队列
|
||||||
ThreadFactory threadFactory,
|
ThreadFactory threadFactory,//线程工厂,用来创建线程,一般默认即可
|
||||||
RejectedExecutionHandler handler) {
|
RejectedExecutionHandler handler//拒绝策略,当提交的任务过多而不能及时处理时,我们可以定制策略来处理任务
|
||||||
|
) {
|
||||||
if (corePoolSize < 0 ||
|
if (corePoolSize < 0 ||
|
||||||
maximumPoolSize <= 0 ||
|
maximumPoolSize <= 0 ||
|
||||||
maximumPoolSize < corePoolSize ||
|
maximumPoolSize < corePoolSize ||
|
||||||
@ -168,7 +169,9 @@ public class ScheduledThreadPoolExecutor
|
|||||||
- **`ThreadPoolExecutor.DiscardPolicy`:** 不处理新任务,直接丢弃掉。
|
- **`ThreadPoolExecutor.DiscardPolicy`:** 不处理新任务,直接丢弃掉。
|
||||||
- **`ThreadPoolExecutor.DiscardOldestPolicy`:** 此策略将丢弃最早的未处理的任务请求。
|
- **`ThreadPoolExecutor.DiscardOldestPolicy`:** 此策略将丢弃最早的未处理的任务请求。
|
||||||
|
|
||||||
举个例子: Spring 通过 `ThreadPoolTaskExecutor` 或者我们直接通过 `ThreadPoolExecutor` 的构造函数创建线程池的时候,当我们不指定 `RejectedExecutionHandler` 饱和策略的话来配置线程池的时候默认使用的是 `ThreadPoolExecutor.AbortPolicy`。在默认情况下,`ThreadPoolExecutor` 将抛出 `RejectedExecutionException` 来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。 对于可伸缩的应用程序,建议使用 `ThreadPoolExecutor.CallerRunsPolicy`。当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看 `ThreadPoolExecutor` 的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了。)
|
举个例子:
|
||||||
|
|
||||||
|
> Spring 通过 `ThreadPoolTaskExecutor` 或者我们直接通过 `ThreadPoolExecutor` 的构造函数创建线程池的时候,当我们不指定 `RejectedExecutionHandler` 饱和策略的话来配置线程池的时候默认使用的是 `ThreadPoolExecutor.AbortPolicy`。在默认情况下,`ThreadPoolExecutor` 将抛出 `RejectedExecutionException` 来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。 对于可伸缩的应用程序,建议使用 `ThreadPoolExecutor.CallerRunsPolicy`。当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看 `ThreadPoolExecutor` 的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了。)
|
||||||
|
|
||||||
### 3.2 推荐使用 `ThreadPoolExecutor` 构造函数创建线程池
|
### 3.2 推荐使用 `ThreadPoolExecutor` 构造函数创建线程池
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user