定時任務 ScheduledExecutorService

import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.*; /** * ScheduledExecutorService是從Java SE 5的java.util.concurrent裏,作爲併發工具類被引進的,這是最理想的定時任務實現方式。 * 相比於上兩個方法(普通thread和用Timer、TimerTask),它有如下好處: * 相比於Timer的單線程,它是經過線程池的方式來併發執行任務的 * 能夠很靈活的去設定第一次執行任務delay時間 * 提供了良好的約定,以便設定執行的時間間隔 */
public class Timer implements Runnable { private String something; private int index = 0; public Timer(String something) { this.something = something; } @Override public void run() { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if("beautiful".equals(something)) { if (index == "beautiful".length()) { System.out.println(); System.out.println(df.format(new Date()) + "  " + "beautiful!!!"); index = 0; } else { if (index == 0) System.out.print(df.format(new Date()) + "  "); System.out.print("beautiful".charAt(index)); index++; } }else{ System.out.println(df.format(new Date())+"  "+something); } } public static void main(String[] args) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ScheduledExecutorService service = Executors.newScheduledThreadPool(10); System.out.println(df.format(new Date())+"  you are"); long initialDelay1 = 1; //從如今開始1秒鐘以後,只執行一次
        service.schedule(new Timer("... ..."), initialDelay1,TimeUnit.SECONDS); long initialDelay2 = 2; //延遲
        long period2 = 1; //間隔 // 從如今開始2秒鐘以後,每隔1秒鐘執行一次 // scheduleAtFixedRate 每隔固定的時間,當即執行下一次。(scheduleWithFixedDelay 等上一次任務執行完畢,纔會執行下一次)
        service.scheduleAtFixedRate(new Timer("beautiful"),initialDelay2, period2, TimeUnit.SECONDS); } }

結果:java

2018-09-19 14:01:52 you are 2018-09-19 14:01:53 ... ... 2018-09-19 14:01:54 beautiful 2018-09-19 14:02:03  beautiful!!!
2018-09-19 14:02:04 beautiful 2018-09-19 14:02:13  beautiful!!!。。。
相關文章
相關標籤/搜索