springboot定时任务(单线程和多线程)

springboot使用过程中 我们经常会使用到定时任务
这个注解应该会很熟悉
//定时任务1(2s执行一次)
@Scheduled(cron = "0/2 * * * * ? ")

@Component
public class StaticScheduleTask {
	
	//定时任务1(2s执行一次)
	@Scheduled(cron = "0/2 * * * * ? ")
	public void scheDuleTask() {
		System.out.println("test"+Thread.currentThread());
	}
	
	//定时任务2(5s执行一次)
	@Scheduled(cron = "0/5 * * * * ? ")
	public void scheDuleTask2() {
		System.out.println("test2"+Thread.currentThread());
	}

}

我们可以用这个定时的任务做我们自己的逻辑 比如定时的更新本地的内存缓存
但是这样做有一个问题 当定时任务的类中有很多定时任务的方法时 这样做会有问题,假如一个任务执行的时间特别长,那么其他的任务就会被阻塞造成不能及时的执行。
而定时任务默认为单线程的,我们可以用多条线程取执行多个任务

设置线程池 (注意启动类上要加@EnableScheduling)

@Configuration
public class ScheduledConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
    }
}

关于这个定时任务有很多实现方式 ,我只说最简单的这一中

你可能感兴趣的:(java,开发中遇到的问题,开发细节问题)