本文共 2317 字,大约阅读时间需要 7 分钟。
在阿里巴巴的开发手册中,明确指出不推荐直接使用 Executors 来创建线程,而是应该使用 ThreadPoolExecutor。这种选择背后的原因有很多,但最重要的原因之一是 ThreadPoolExecutor 提供了更好的线程管理和资源利用能力。
在使用 ThreadPoolExecutor 时,它提供了七个关键参数,这些参数对于配置线程池的性能和行为至关重要。以下是这些参数的解释:
ThreadPoolExecutor 提供了四种拒绝策略,允许开发者根据具体需求选择最适合的策略:
在实际业务场景中,银行的业务办理可以通过 ThreadPoolExecutor 来模拟。以下是一个典型的实现示例:
import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadPoolExecutorDemo { public static void main(String[] args) { ThreadPoolExecutor threadPool = new ThreadPoolExecutor( 2, // 最多开启2个窗口 5, // 最多同时处理的业务量 2, // 超时时间(秒) TimeUnit.SECONDS, new LinkedBlockingQueue<>(3), //候客区最多容纳3个客户 Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy() ); try { // 最大承载能力:窗口 + 候客区 for (int i = 1; i <= 9; i++) { threadPool.execute(() -> { System.out.println(Thread.currentThread().getName() + " ok"); }); } } catch (Exception e) { e.printStackTrace(); } finally { threadPool.shutdown(); } }} 通过上述代码可以发现:
ThreadPoolExecutor 的七大参数如下:
corePoolSize:2(最多开启2个窗口)maxPoolSize:5(最多同时处理的业务量)timeUnit:2(超时时间)linkedBlockingQueue:3(候客区最多容纳3个客户)threadFactory:默认线程工厂rejectionPolicy:丢弃旧任务策略通过合理配置这些参数,可以实现更高效的线程管理和资源利用。
转载地址:http://myhg.baihongyu.com/