美文网首页
问题:ScheduledExecutorService接口是什么

问题:ScheduledExecutorService接口是什么

作者: Dream_Lin | 来源:发表于2019-01-23 11:16 被阅读5次

问题

ScheduledExecutorService接口是什么

答案

ScheduledExecutorService接口

  • schedule方法

ScheduledExecutorService用于延迟一段时间后执行任务或者周期性的执行任务.通常使用Executor类的工厂方法去实例化一个ScheduledExecutorService是一个比较好的方式.

这里我们创建一个带有一个线程的ScheduledExecutorService.

ScheduledExecutorService executorService =Executors.newSingleThreadScheduledExecutor();

为了延迟一段时间后执行任务,使用ScheduledExecutorService接口的scheduled()方法,这个接口提供了两个方法,用于执行Runnable任务或者Callable任务.

       Callable<String> callableTask = () -> {
            System.out.println("callAble");
            return "callAble";
        };

        Runnable runnableTask = () -> {
            System.out.println("runnable");
        };

        ScheduledExecutorService  executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.schedule(callableTask,3,TimeUnit.SECONDS);

        executorService.schedule(runnableTask,3,TimeUnit.SECONDS);

上面的代码延迟了3秒后再执行任务.

  • scheduleAtFixedRate方法

scheduleAtFixedRate()方法在延迟一段时间之后周期性的执行一个任务.下面的代码将会先延迟1秒之后首次执行,之后每隔3秒执行.如果所需要执行的时间大于我们指定的时间,那将会在执行时间过后立即执行.

    ScheduledExecutorService  executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(runnableTask,1,3,TimeUnit.SECONDS);
  • scheduleWithFixedDelay方法

如果需要任务周期性执行的时候保持固定的时间间隔,应该使用scheduleWithFixedDalay()方法.如下的代码保证上一次任务执行完过10秒之后再执行下一次任务.

  executorService.scheduleWithFixedDelay(runnableTask,1,10,TimeUnit.SECONDS);

scheduleAtFixedRate()方法和scheduleWithFixedDelay()方法约定:如果ExecutorService被关闭,或者在任务执行过程中抛出了一个异常,那么周期性执行的任务将会终止.

相关文章

网友评论

      本文标题:问题:ScheduledExecutorService接口是什么

      本文链接:https://www.haomeiwen.com/subject/njrjjqtx.html