Java ScheduledExecutorService定時任務案例講解
一、ScheduledExecutorService 設計思想
ScheduledExecutorService,是基於線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,也就是說,任務是並發執行,互不影響。
需要註意,隻有當調度任務來的時候,ScheduledExecutorService才會真正啟動一個線程,其餘時間ScheduledExecutorService都是出於輪詢任務的狀態。
1、線程任務
class MyScheduledExecutor implements Runnable { private String jobName; MyScheduledExecutor() { } MyScheduledExecutor(String jobName) { this.jobName = jobName; } @Override public void run() { System.out.println(jobName + " is running"); } }
2、定時任務
public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(10); long initialDelay = 1; long period = 1; // 從現在開始1秒鐘之後,每隔1秒鐘執行一次job1 service.scheduleAtFixedRate(new MyScheduledExecutor("job1"), initialDelay, period, TimeUnit.SECONDS); // 從現在開始2秒鐘之後,每隔2秒鐘執行一次job2 service.scheduleWithFixedDelay(new MyScheduledExecutor("job2"), initialDelay, period, TimeUnit.SECONDS); }
ScheduledExecutorService 中兩種最常用的調度方法 ScheduleAtFixedRate 和 ScheduleWithFixedDelay。ScheduleAtFixedRate 每次執行時間為上一次任務開始起向後推一個時間間隔,即每次執行時間為 :initialDelay, initialDelay+period, initialDelay+2*period, …;ScheduleWithFixedDelay 每次執行時間為上一次任務結束起向後推一個時間間隔,即每次執行時間為:initialDelay, initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。由此可見,ScheduleAtFixedRate 是基於固定時間間隔進行任務調度,ScheduleWithFixedDelay 取決於每次任務執行的時間長短,是基於不固定時間間隔進行任務調度。
到此這篇關於Java ScheduledExecutorService定時任務案例講解的文章就介紹到這瞭,更多相關Java ScheduledExecutorService定時任務內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java中定時任務的6種實現方式
- java高並發ScheduledThreadPoolExecutor類深度解析
- 帶你快速搞定java並發庫
- 一篇文章帶你瞭解Java中ThreadPool線程池
- Java Spring分別實現定時任務方法