ScheduledExecutorService
学习是不能间断的,靠的是积累,不积跬步,无以至千里!不聚小流,无以成江河!今天又看到一个比较好用的类ScheduledExecutorService在我看来这是一个用来定时的类,简直是方便极了。
浅谈ScheduledExecutorService
1、ScheduledExecutorService有四个重要的方法
> a. executorService.scheduleWithFixedDelay(Runnable command, long initialDelay, long delay,TimeUnit unit); > command - 是执行的任务。 > initialDelay - 首次执行延时的时间。 > delay - 首次执行后,每次执行结束后延时的时间,下面有例子解释这个。 > unit - 时间的单位,可以是时分秒天月年 不解释。 > b. executorService.scheduleAtFixedRate(Runnable command, long initialDelay,long period,TimeUnit unit); > command - 是执行的任务。 > initialDelay - 首次执行延时的时间。 > period - 首次执行后,每隔period时间执行一次任务。 > unit - 时间的单位,可以是时分秒天月年 不解释。 > c. executorService.schedule(callable, delay, unit); > callable - 看下面↓↓↓
Callable 和 Runnable 的使用方法大同小异, 区别在于:
- 1.Callable 使用 call() 方法, Runnable 使用 run() 方法
- 2.call() 可以返回值, 而 run()方法不能返回。
3.call() 可以抛出受检查的异常,比如ClassNotFoundException, 而run()不能抛出受检查的异常。
delay - 延时的时间
unit - 时间的单位,可以是时分秒天月年 不解释。executorService.schedule(command, delay, unit);
……就是delay时间后执行command 不解释了啊
例子a
/* 三秒后开始执行任务command,command执行完后延时一秒再执行command。每次command执行完后就延时一秒再执行一次..... 假如说command执行完成需要5秒:第一次是3秒后执行,第二次是3+5+1 秒后执行,第三次是3+5+1+5+1 秒执行。。。。。。。。。。。。。。。。。。。 */ private static void runMothe() { executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleWithFixedDelay(command, 3, 1, TimeUnit.SECONDS); } static Runnable command = new Runnable() { @Override public void run() { System.out.println("---"); } };
- 例子b
/* 三秒后开始执行任务command,然后每隔一秒执行一次 假如说command执行完成需要5秒:第一次是3秒后执行,第二次是3+1 秒后执行,第三次是3+1+1 秒执行,依次加一。。。。。。。。。。。。。。。。。。。 */ private static void runMothe() { executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleAtFixedRate(command, 3, 1, TimeUnit.SECONDS); } static Runnable command = new Runnable() { @Override public void run() { System.out.println("---"); } };
- 例子c
// 很简单,三秒后执行回调输出结果“ooo” public static void main(String[] args) { runMothe(); try { String string = schedule.get(); System.out.println(string); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void runMothe() { executorService = Executors.newSingleThreadScheduledExecutor(); schedule = executorService.schedule(new Callable<String>() { @Override public String call() throws Exception { return "ooo"; } }, 5, TimeUnit.SECONDS); }
- 例子d
//交给你了!