使用java自帶的times實現定時任務
阿新 • • 發佈:2020-09-16
timer
即jdk裡面提供的java.util.Timer和java.util.TimerTask兩個類.
其中TimerTask表示具體的任務,而Timer排程任務.
簡單的例子如下:
import java.util.Timer; import java.util.TimerTask; public class TimerTest extends TimerTask { private String jobName = ""; public TimerTest(String jobName) { super(); this.jobName = jobName; } @Overridepublic 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); } }
當然在生產環境中Timer是不建議使用了的. 它在多執行緒的環境下, 會存在一定的問題:
1. 當一個執行緒丟擲異常時,整個timer都會停止執行.例如上面的job1丟擲異常的話,
job2也不會再跑了.
2. 當一個執行緒裡面處理的時間非常長的話, 會影響其他job的排程.
例如, 如果job1處理的時間要60秒的話, 那麼job2就變成了60秒跑一次了.
複製程式碼
基於上面的原因, timer現在一般都不會再使用了.
原文連結:https://juejin.im/post/6844904002606350343