使用Java队列来处理日志信息(线程池的使用)

本文介绍了遵循阿里规范使用ThreadPoolExecutor创建线程池处理日志的重要性,并详细解释了构造器参数。通过LogQueue作为日志队列,Controller作为生产者记录日志,LogEntity作为日志实体,自定义线程执行日志操作,最后使用定时器从队列中取出日志并保存到数据库。
摘要由CSDN通过智能技术生成

阿里的规范是使用new ThreadPoolExecutor()来创建线程池,二不是使用Excutor的静态工具类来创建线程池,具体可以查看博客(两篇):

 

https://blog.csdn.net/angus_Lucky/article/details/79862491


https://blog.csdn.net/qq_31615049/article/details/80756781

,以及博客中有详解介绍

关于线程池ThreadPoolExecutor,其总共有四个构造器,其中最完整的一个构造方法为如下:

public ThreadPoolExecutor(int corePoolSize,                             //核心线程池数量
                              int maximumPoolSize,                      //最大线程池大小
                              long keepAliveTime,                       //线程池中超过                                         corePoolSize数目的空闲线程最大存活时间;可以allowCoreThreadTimeOut(true)使得核心线程有效时间
                              TimeUnit unit,                            //keepAliveTime时间单位
                              BlockingQueue<Runnable> workQueue,        //阻塞任务队列
                              ThreadFactory threadFactory,              //新建线程工厂
                              RejectedExecutionHandler handler) {...}   //当提交任务数超过maxmumPoolSize+workQueue之和时,任务会交给RejectedExecutionHandler来处理

关于其中的参数介绍:

一:ThreadPoolExecutor的重要参数
 
corePoolSize:核心线程数
核心线程会一直存活,及时没有任务需要执行
当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理
设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭
queueCapacity:任务队列容量(阻塞队列)
当核心线程数达到最大时,新任务会放在队列中排队等待执行
maxPoolSize:最大线程数
当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务
当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常
keepAliveTime:线程空闲时间
当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize
如果allowCoreThreadTimeout=true,则会直到线程数量=0
allowCoreThreadTimeout:允许核心线程超时
rejectedExecutionHandler:任务拒绝处理器
两种情况会拒绝处理任务:
当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务
当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。如果在调用shutdown()和线程池真正shutdown之间提交任务,会拒绝新任务
线程池会调用rejectedExecutionH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值