定时任务 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!!!。。。
相关文章
相关标签/搜索