Java基本的定時任務,一般有這幾種方式:
一、Timer
1 public class Timer{ 2 static int index=0; 3 public static void main(String[] args){ 4 Timer timer=new Timer(); 5 timer.schedule(new TimerTask() { 6 @Override 7 public void run() { 8 index++; 9 System.out.println("你好"); 10 if (index>100){ 11 timer.cancel(); 12 } 13 } 14 },0,1000); 15 } 16 }
通過往Timer提交一個TimerTask的任務,同時指定多久后開始執行以及執行周期,就可以周期執行任務。
二、Threa線程
1 public class ThreadTest implements Runnable{ 2 static int i=0; 3 @Override 4 public void run() { 5 Boolean t=true; 6 while (t){ 7 i++; 8 try { 9 if (i<100) { 10 Thread.sleep(1000); 11 System.out.println("你好"); 12 }else{ 13 t=false; 14 } 15 } catch (InterruptedException e) { 16 e.printStackTrace(); 17 } 18 } 19 } 20 public static void main(String[] args){ 21 ThreadTest test=new ThreadTest(); 22 Thread t=new Thread(test); 23 t.start(); 24 }
通過創建一個線程,讓它在while循環里一直運行着,通過sleep方法來達到定時任務的效果。
三、Sping的@Scheduled注解定時
1 @Scheduled(fixedDelay = 5000) 2 public void note(){ 3 System.out.println("你好"); 4 }
注解中指定的屬性名稱是fixedRate,是指以固定頻率(周期)執行任務,這個周期是以上一個任務開始時間為基准。
1 @Scheduled(cron="0 0 8 * * ?") 2 public void note(){ 3 System.out.println("你好"); 4 }
注解中指定的屬性名稱是cron,指定時調用,cron的參數依次指:
- 秒(0~59)
- 分鍾(0~59)
- 小時(0~23)
- 天(月)(0~31,但是你需要考慮你月的天數)
- 月(0~11)
- 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
- 年份(1970-2099)
四、分布式定時框架LTS
LTS 源碼地址: https://github.com/ltsopensource/light-task-scheduler
實例源碼:4種demo包括純java、xml配置、注解配置、springboot
LTS 代碼例子地址:https://github.com/ltsopensource/lts-examples/tree/master/lts-example-jobclient