线程创建 线程池ThreadPoolTaskExecutor 介绍

本文介绍了Java创建线程的多种方式,包括继承Thread类、实现Runnable接口和Callable接口。重点讲解了使用ThreadPoolTaskExecutor创建线程池,并详细阐述了线程池的配置、执行情况和拒绝策略。线程池的执行流程包括检查核心线程池、任务队列和最大线程池数,以及在超出限制时如何应用不同的拒绝策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 java 创建线程的方式

1 继承Thread类 重写run方法 创建的线程不共享资源

2 实现Runnable 接口 重写run方法 创建的线程共享资源

3 实现Callable<T> 接口,再使用FutureTask<>封装Callable<T>的对象,这个方式创建的线程共享资源,可以捕获异常,可以有返回值。

3.5可以直接用Exectuors工厂类来创建线程池

4 本项目使用ThreadPoolTaskExecutor  

线程池的配置:

 

执行情况:

参数是一个自定义的类,实现了Runnable 接口

拒绝策略种类:

rejectedExectutionHandler参数字段用于配置绝策略,常用拒绝策略如下

AbortPolicy:用于被拒绝任务的处理程序,它将抛出RejectedExecutionException

CallerRunsPolicy:用于被拒绝任务的处理程序,它直接在execute方法的调用线程中运行被拒绝的任务。

DiscardOldestPolicy:用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试execute。

DiscardPolicy:用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。

处理流程

1.查看核心线程池是否已满,不满就创建一条线程执行任务,否则执行第二步。

2.查看任务队列是否已满,不满就将任务存储在任务队列中,否则执行第三步。

3.查看线程池是否已满,即就是是否达到最大线程池数,不满就创建一条线程执行任务,否则就按照策略处理无法执行的任务。

### 回答1: SpringBoot默认的线程池ThreadPoolTaskExecutor的默认配置参数是多线程的。 ThreadPoolTaskExecutor的默认参数配置如下: - 核心线程数:默认为1 - 最大线程数:默认为Integer.MAX_VALUE - 线程存活时间:默认为60s 如果要使用单线程,可以通过设置核心线程数和最大线程数都为1来实现。 比如,使用如下配置: ``` @Bean public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(1); executor.setMaxPoolSize(1); return executor; } ``` 这样就可以创建一个单线程线程池了。 ### 回答2: Spring Boot 默认的线程池 ThreadPoolTaskExecutor 的默认配置参数不是单线程。具体来说,ThreadPoolTaskExecutor 在 Spring Boot 中默认配置了一个核心线程数和最大线程数都为8的线程池,并且使用的是无界队列 LinkedBlockingQueue。 这意味着,默认情况下,ThreadPoolTaskExecutor创建8个核心线程,并且同时最多可以有8个活动线程在执行任务。如果任务数量超过了核心线程数,则会将任务放到无界队列中等待执行。当无法将任务添加到队列中时(即队列已满),ThreadPoolTaskExecutor创建新的线程执行任务,直到达到最大线程数。 需要注意的是,默认情况下,ThreadPoolTaskExecutor 使用的是无界队列 LinkedBlockingQueue,即不会有任务被拒绝,而是会一直等待,直到队列满为止。这可能会导致线程池中的线程数量一直增长,直到达到最大线程数为止。如果需要限制线程池的大小,可以通过配置 ThreadPoolTaskExecutor 的 maxPoolSize 参数来实现。 总而言之,Spring Boot 默认的线程池 ThreadPoolTaskExecutor 的默认配置参数不是单线程,而是一个具备一定线程数和队列容量的线程池。 ### 回答3: SpringBoot默认的线程池ThreadPoolTaskExecutor默认配置参数不是单线程。 默认情况下,SpringBoot的线程池ThreadPoolTaskExecutor采用了一些默认配置参数。其中核心线程数(corePoolSize)默认为1,最大线程数(maxPoolSize)默认为Integer.MAX_VALUE,队列容量(queueCapacity)默认为Integer.MAX_VALUE,线程空闲时间(keepAliveTime)默认为60秒。 根据这些默认参数配置,线程池的核心线程数为1,最大线程数为无限,队列容量也是无限。这意味着线程池的初始时只会有一个核心线程在运行任务,当任务过多无法立即处理时,会将任务放入无限容量的队列中等待执行,同时还可以根据需要自动创建多个线程来处理任务。 所以,SpringBoot默认的线程池ThreadPoolTaskExecutor默认配置参数不是单线程,而是可以支持并发处理多个任务的。它可以根据实际需要在核心线程和最大线程之间动态调整,并且可以容纳大量的任务在队列中等待执行。这一特性使得它非常适合处理高并发的场景。同时,使用者可以根据实际需求进行参数的调整,以满足不同的业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值