ScheduledExecutorService

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值