Java 實現的幾種任務調度方式

1. Java實現定時任務方式

public class Demo01 {
	staticlongcount = 0;
	public static void main(String[] args) {
		Runnable runnable = new Runnable() {
			@Override
			publicvoid run() {
				while (true) {
					try {
						Thread.sleep(1000);
						count++;
						System.out.println(count);
					} catch (Exception e) {
						// TODO: handle exception
					}
				}
			}
		};
		Thread thread = new Thread(runnable);
		thread.start();
	}
}

2. TimerTask實現定時任務

/**
 * 使用TimerTask類實現定時任務
*/
public class Demo02 {
	static long count = 0;

	public static void main(String[] args) {
		TimerTask timerTask = new TimerTask() {

			@Override
			publicvoid run() {
				count++;
				System.out.println(count);
			}
		};
		Timer timer = new Timer();
		// 天數
		longdelay = 0;
		// 秒數
		longperiod = 1000;
		timer.scheduleAtFixedRate(timerTask, delay, period);
	}

}

3.ScheduledExecutorService 實現

publicclass Demo003 {
	publicstaticvoid main(String[] args) {
		Runnable runnable = new Runnable() {
			publicvoid run() {
				// task to run goes here
				System.out.println("Hello !!");
			}
		};
		ScheduledExecutorServiceservice = Executors.newSingleThreadScheduledExecutor();
		// 第二個參數爲首次執行的延時時間,第三個參數爲定時執行的間隔時間
		service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
	}
}

4.spring boot+ quartz 實現方式

1.引入maven依賴

		<!-- quartz -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.1</version>
		</dependency>

2.任務調度類

publicclass MyJob implements Job {
	publicvoid execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("quartz MyJob date:" + new Date().getTime());
	}
}

3.啓動任務類

//1.創建Scheduler的工廠
      SchedulerFactory sf = new StdSchedulerFactory();
//2.從工廠中獲取調度器實例
      Scheduler scheduler = sf.getScheduler();


//3.創建JobDetail
      JobDetail jb = JobBuilder.newJob(MyJob.class)
              .withDescription("this is a ram job") //job的描述
              .withIdentity("ramJob", "ramGroup") //job 的name和group
              .build();

//任務運行的時間,SimpleSchedle類型觸發器有效
longtime=  System.currentTimeMillis() + 3*1000L; //3秒後啓動任務
      Date statTime = new Date(time);

//4.創建Trigger
//使用SimpleScheduleBuilder或者CronScheduleBuilder
      Trigger t = TriggerBuilder.newTrigger()
                  .withDescription("")
                  .withIdentity("ramTrigger", "ramTriggerGroup")
//.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                  .startAt(statTime)  //默認當前時間啓動
                  .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //兩秒執行一次
                  .build();

//5.註冊任務和定時器
scheduler.scheduleJob(jb, t);

//6.啓動調度器
scheduler.start();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章