ThreadPoolExecutor记录

基本工作流程:
当一个任务提交时,如果当前启动的线程数小于核心线程数量,则启动新的线程处理任务,即使其他线程时空闲状态.当大于核心线程数量且小于最大线程数量,并且当队列满了时创建新线程进行处理.

线程池工作线程创建:
工作线程创建使用的ThreadFactory.如果没有特殊定义,使用DefaultThreadFactory工厂进行创建,默认工厂创建的线程有相同的ThreadGroup,非守护型,正常优先级别.可以自定义线程工厂,设置新线程的名字,线程组,守护类型,优先级别.

Keep-alive时间:
线程大于核心线程数量时,当业务减少,空闲超过指定时间后,终止线程.可以通过allowCoreThreadTimeOut参数设置空闲策略引用于核心线程.

三种常用队列:
SynchronousQueue:同步队列,直接传递任务到线程,如果没有线程处理将会失败.一般配置线程最大值无边界.
LinkedBlockingQueue:无边界队列.一般适用于固定线程池大小的实现.因为队列打不到full状态,从而无法创建大于核心线程数量的数量.
ArrayBlockingQueue:有边界队列.

拒绝任务策略:
AbortPolicy:抛出异常
CallerRunsPolicy:调用者自己执行
DiscardPolicy:直接丢弃
DiscardOldestPolicy:丢弃时间最久的

Hook methods:
beforeExecute(Thread, Runnable)
afterExecute(Runnable, Throwable)
再线程执行前后执行,可以用于清理Threadlocal,搜集执行信息等.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThreadPoolExecutor类中的beforeExecute方法是一个钩子方法,用于在线程执行任务之前执行一些操作。它可以被子类重写以提供自定义的行为。在beforeExecute方法中,可以执行一些准备工作,例如日志记录、资源分配等。 以下是一个示例代码,演示了如何重写ThreadPoolExecutor的beforeExecute方法: ```java import java.util.concurrent.*; public class MyThreadPoolExecutor extends ThreadPoolExecutor { public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } @Override protected void beforeExecute(Thread t, Runnable r) { // 在任务执行之前执行一些操作 System.out.println("Thread " + t.getName() + " is about to execute task " + r.toString()); } // 其他自定义方法和重写的方法... public static void main(String[] args) { // 创建自定义的线程池 ThreadPoolExecutor executor = new MyThreadPoolExecutor(2, 4, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); // 提交任务给线程池 for (int i = 0; i < 5; i++) { executor.execute(() -> { System.out.println("Task executed by " + Thread.currentThread().getName()); }); } // 关闭线程池 executor.shutdown(); } } ``` 在上述示例中,我们创建了一个自定义的ThreadPoolExecutor类,并重写了beforeExecute方法。在该方法中,我们打印了线程的名称和即将执行的任务的信息。然后,我们使用自定义的线程池执行了5个任务,并最后关闭了线程池。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值