JAvaタイムスケジューラ(タイミングタスク)

2469 ワード

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:マルチスレッドがすべてのタスクを走っているので、各タスクのエラーは他のタスクに影響しません.このエラーのタスクは自動的に回復できます.