问题:ScheduledExecutorService接口是什么

问题

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被关闭,或者在任务执行过程中抛出了一个异常,那么周期性执行的任务将会终止.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。