定时任务的实现方式
1、通过Timer + Timetask 完成调度
public void runAtTime(){
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println(System.currentTimeMillis());
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask,0L,1000L);
}
2、通过线程池 SchdulerExecutorService 实现
public void runAtSpecTime(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
// 创建一个线程池
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(
runnable,
0L, //延时时间
1L, //执行的时间间隔
TimeUnit.SECONDS
);
}
3、通过框架 Quartz 实现
执行逻辑的实现
public class SpecJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(jobExecutionContext.getMergedJobDataMap().get("hello"));
System.out.println(System.currentTimeMillis());
}
}
实现调度任务
public static void main(String[] args) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(SpecJob.class)
.withIdentity("aogusitus","settle")
.usingJobData("hello","kitty")
.build();
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(10)
.repeatForever()
)
.forJob("aogusitus","settle")
.build();
scheduler.scheduleJob(jobDetail,trigger);
scheduler.start();
}
1539

被折叠的 条评论
为什么被折叠?



