一個系統剛剛構建的時候,每每須要定時執行的任務,但沒有,有人就推薦java的timerjava
import java.util.Timer; import java.util.TimerTask; public class TimerTest extends TimerTask { private String jobName = ""; public TimerTest(String jobName) { super(); this.jobName = jobName; } @Override public void run() { System.out.println("execute " + jobName); } public static void main(String[] args) { Timer timer = new Timer(); long delay1 = 1 * 1000; long period1 = 1000; // 從如今開始 1 秒鐘以後,每隔 1 秒鐘執行一次 job1 timer.schedule(new TimerTest("job1"), delay1, period1); long delay2 = 2 * 1000; long period2 = 2000; // 從如今開始 2 秒鐘以後,每隔 2 秒鐘執行一次 job2 timer.schedule(new TimerTest("job2"), delay2, period2); } }
或者sheduler,linux
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledExecutorTest implements Runnable { private String jobName = ""; public ScheduledExecutorTest(String jobName) { super(); this.jobName = jobName; } @Override public void run() { System.out.println("execute " + jobName); } public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(10); long initialDelay1 = 1; long period1 = 1; // 從如今開始1秒鐘以後,每隔1秒鐘執行一次job1 service.scheduleAtFixedRate( new ScheduledExecutorTest("job1"), initialDelay1, period1, TimeUnit.SECONDS); long initialDelay2 = 1; long delay2 = 1; // 從如今開始2秒鐘以後,每隔2秒鐘執行一次job2 service.scheduleWithFixedDelay( new ScheduledExecutorTest("job2"), initialDelay2, delay2, TimeUnit.SECONDS);
這兩樣在單機上運行都沒有問題,但若是有多臺機器就沒法使用了,緣由是重複執行。redis
解決的方即可以使用鎖(數據庫或者redis等其餘的),這樣會增長程序的複雜度,這裏有一個更好的解決方式:使用linux自帶的crontab數據庫
crontab -u //設定某個用戶的cron服務
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除某個用戶的cron服務
crontab -e //編輯某個用戶的cron服務ide
基本格式 :this
第2列表示小時1~23(0表示0點)code
第3列表示日期1~31blog
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)crontab
第6列要運行的命令it