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!!!。。。