JAvaタイムスケジューラ(タイミングタスク)
package com.ssh.quartz;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class TaskTest {
public static void main(String[] args)throws Exception {
// testTimer();
// testSchedule();
testQuartz();
}
public static void testTimer() {
Timer t = new Timer();
t.scheduleAtFixedRate(new Task(), 0, 1000 * 2);
}
public static void testSchedule() {
ScheduledExecutorService execService = Executors
.newScheduledThreadPool(3);
execService.scheduleAtFixedRate(new ScheduleTask(), 0, 2,
TimeUnit.SECONDS);
}
public static void testQuartz() throws Exception {
SchedulerFactory schedFact = new StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.usingJobData("jobSays", "hello world!")
.usingJobData("myFloatValue", 3.141f).build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
.build();
sched.scheduleJob(job, trigger);
}
}
class ScheduleTask implements Runnable {
public void run() {
System.out.println("test shedule");
}
}
class Task extends TimerTask {
@Override
public void run() {
System.out.println("test timer");
}
}
package com.ssh.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("test quartz");
}
}
3つの違い:
Timerは単一スレッドであり、いずれかのタスクがエラーを報告した場合、すべてのタスクが失敗し、リカバリできません.
ScheduledExecutorServiceはスレッドプールですべてのタスクを実行しています.タスクが間違っている場合は、他のタスクには影響しません.しかし、この誤報の任務は回復できない.
quartz:マルチスレッドがすべてのタスクを走っているので、各タスクのエラーは他のタスクに影響しません.このエラーのタスクは自動的に回復できます.