美文网首页
ThreadPoolTaskScheduler

ThreadPoolTaskScheduler

作者: chrisghb | 来源:发表于2022-07-25 10:36 被阅读0次
@Resource
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
// 有返回值的任务提交使用
Future<?> future = threadPoolTaskScheduler.submit(() -> {
    return "2019";
});
=========================================================================
// 无返回值的任务提交使用
threadPoolTaskScheduler.execute(new myTask());
========================================================================= 
// 定时任务 添加任务内容(Runnable) 设置执行周期(Trigger)
ScheduledFuture<?> futurefuture = threadPoolTaskScheduler.schedule(new myTask(), new CronTrigger("0/1 * * * * ?"));
// 定时任务 添加任务内容(Runnable) 在指定时间执行一次定时任务
ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(new myTask(), startTime);

private class myTask implements Runnable {
    @Override
    public void run() {
        System.out.println("test");
    }
}
=========================================================================  
// 指定间隔时间执行一次任务,间隔时间为前一次任务完成到下一次开始时间(10毫秒)    
ScheduledFuture<?> future = threadPoolTaskScheduler.scheduleWithFixedDelay(new Runnable() {
    @Override
    public void run() {
    }   
}, 10L);
=========================================================================
// 固定的频率来执行任务,在任务开始后,period时间后,便会执行下一次任务。如果period时间到了,但上一次还没执行完毕,则等待,直到上一次的任务执行完毕,然后马上执行本次任务
ScheduledFuture<?> future = threadPoolTaskScheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
    }   
}, 10L);
=========================================================================    
/**
 * 类名称:ScheduleTaskConfig.java 类描述:配置ThreadPoolTaskScheduler
 */
@Configuration
public class ScheduleTaskConfig {
    /**
     * 配置线程池任务高度类
     * @return ThreadPoolTaskScheduler
     */
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        // 线程池大小
        threadPoolTaskScheduler.setPoolSize(20);
        // 线程执行前缀
        threadPoolTaskScheduler.setThreadNamePrefix("threadPoolTaskScheduler-");
        return threadPoolTaskScheduler;
    }
}
这里简要说明一下线程池不同情况说明:
若工作线程数 < corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
若工作线程数 = corePoolSize,但是缓冲队列未满,那么任务被放入缓冲队列。
若工作线程数 > corePoolSize,缓冲队列满,线程数 < maxPoolSize,创建新的线程来处理被添加的任务。
若工作线程数 > corePoolSize,缓冲队列满,线程数 = maxPoolSize,通过handler策略来处理此任务。
    
处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize。如果三者都满了,使用handler处理被拒绝的任务。

相关文章

网友评论

      本文标题:ThreadPoolTaskScheduler

      本文链接:https://www.haomeiwen.com/subject/omnzbrtx.html