线程池7个参数

线程池

什么是线程池?
线程池就是一个可以复用线程的技术。
不使用线程池的问题
如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。

JDK 5.0起提供了代表线程池的接口:ExecutorService
如何得到线程池对象
方式一:使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象

 

方式二:使用Executors(线程池的工具类)调用方法返回不同特点的线程池对象

ThreadPoolExecutor构造器的参数说明

1
2
3
4
5
6
7
8
9
public ThreadPoolExecutor(
         int corePoolSize,                          
        int maximumPoolSize,                          
        long keepAliveTime,                          
        TimeUnit unit,                          
        BlockingQueue<Runnable> workQueue,                          
        ThreadFactory threadFactory,                          
        RejectedExecutionHandler handler
)

参数一:指定线程池的线程数量(核心线程): corePoolSize 不能小于0  这些线程是不会死的 一直都在的线程
参数二:指定线程池可支持的最大线程数: maximumPoolSize 最大数量 >= 核心线程数量。多出的线程是临时工 处理完是要销毁的
参数三:指定临时线程的最大存活时间: keepAliveTime 不能小于0
参数四:指定存活时间的单位(秒、分、时、天): unit 时间单位
参数五:指定任务队列: workQueue 不能为null  (可以 处理任务接口:runnable callable)
参数六:指定用哪个线程工厂创建线程: threadFactory 不能为null
参数七:指定线程忙,任务满的时候,新任务来了怎么办: handler 不能为null

线程池常见面试题
临时线程什么时候创建啊?
新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
什么时候会开始拒绝任务?
核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝。

ThreadPoolExecutor创建线程池对象示例

1
2
3
4
5
6
7
8
9
ExecutorService pool = new ThreadPoolExecutor(
        3,
        5 ,
        6,
        TimeUnit.SECONDS,
        new ArrayBlockingQueue<>(5) ,
        Executors.defaultThreadFactory(),
        new ThreadPoolExecutor.AbortPolicy()
);

ExecutorService的常用方法

新任务拒绝策略

 

 

  

 

posted @   __破  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示