ScheduledExecutorService

来源:互联网 发布:2017淘宝补单平台 编辑:程序博客网 时间:2024/06/05 06:09

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
    //交给你了!
    1 0