@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处理被拒绝的任务。
网友评论