关于定时任务及线程池的一点点心

文章详细介绍了如何在Java中配置和使用ThreadPoolTaskScheduler进行定时任务,包括线程池的配置如设置核心线程数、最大线程数等。同时,提到了基于Timer的定时任务实现方式,以及按照阿里巴巴规范创建线程池的步骤,讨论了不同类型的阻塞队列和拒绝策略,并展示了submit或execute与CountDownLatch的配合使用来控制线程执行边界。

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

关于定时任务及线程池的

基于ThreadPoolTaskSchedule的定时任务

  1. 配置线程池
@Bean(name = AsyncExecutionAspectSupport.DEFAULT_TASK_EXECUTOR_BEAN_NAME)
    public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(64);
        threadPoolTaskScheduler.setThreadNamePrefix("capture-Executor-");
        threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(false);
        threadPoolTaskScheduler.setAwaitTerminationSeconds(10);
        threadPoolTaskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
        log.info("-------------------线程池配置成功-------------------");
        return threadPoolTaskScheduler;
    }
  1. 使用
threadPoolTashScheduler.scheduleAt。。。等一系列方法

基于Timer的定时任务

  1. 创建TimerTask对象,实现run方法
  2. timer.schedule 方法

基于阿里巴巴规范创建的线程池

  1. 实现线程工厂(可省略,使用默认工厂)

  2. 创建线程池,七大参数

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
																												16,
																												64,
																												60L, 
																												TimeUnit.SECONDS,
																												new LinkedBlockingQueue<>(),
																												threadFactory,
																												new ThreadPoolExecutor.DiscardOldestPolicy());

核心线程数,最大线程数,线程活跃时间,时间单位,工作队列,线程工厂,线程池拒绝策略

工作队列:

BlockQueue:阻塞队列,先进先出

ArrayBlockingQueue:数组型阻塞队列,需要初始化一定容量

LinkedBlockingQueue: 内部节点关联

SynchronousQueue: 内部容量为0

PriorityBlockingQueue: 无边界设计,容量受系统资源影响

拒绝策略:

AbortPolicy(默认):丢弃任务并抛出 RejectedExecutionException 异常。
CallerRunsPolicy:由调用线程处理该任务。
DiscardPolicy:丢弃任务,但是不抛出异常。可以配合这种模式进行自定义的处理方式。
DiscardOldestPolicy:丢弃队列最早的未处理任务,然后重新尝试执行任务

  1. submit或者execute

  2. 与countdownLatch配合使用

    用于控制总体的线程执行边界,比如多线程处理一个列表大小为1000的数据,初始化countdownLatch为size,每次提交线程后,countdownLatch减小,当countdownLatch减至0,(若主线程需等待,执行countdownLatch.await())执行完毕

线程池的创建与销毁

tips:调用shutdown()或者shutdownNow()后,需要重新创建线程池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值