当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java ScheduledExecutorService用法及代码示例


ScheduledExecutorServiceJava中的接口是sub-interfaceExecutorService接口定义在java.util.concurrent包。该接口用于定期运行给定的任务或在给定的延迟后运行一次。 ScheduledExecutorService 接口声明了一些有用的方法来安排给定的任务。这些方法是由ScheduledThreadPoolExecutor类。

声明

public interface ScheduledExecutorService extends ExecutorService

ScheduledExecutorService的层次结构

ScheduledExecutorService Interface in Java

实施类

ScheduledExecutorService 的实现类是 ScheduledThreadPoolExecutor

创建ScheduledExecutorService对象

由于ScheduledExecutorService是一个接口,因此无法实例化。但是 java.util.concurrent 包中定义的 Executors 类提供了一些返回 ScheduledExecutorService 对象(其实现类的对象)的工厂方法

  • 公共静态 ScheduledExecutorService newScheduledThreadPool(int corePoolSize):创建一个具有给定核心池大小的新调度线程池(核心池大小)并返回一个 ScheduledExecutorService 对象,该对象可以向下转换为 ScheduledThreadPoolExecutor 对象。该对象可用于在给定延迟后运行任务或定期执行。
  • 公共静态 ScheduledExecutorService newScheduledThreadPool(int corePoolSize , ThreadFactory threadFactory):使用给定的核心池大小 (corePoolSize) 创建一个新的调度线程池,并返回一个 ScheduledExecutorService 对象,该对象可以向下转换为 ScheduledThreadPoolExecutor 对象。第二个参数是创建新线程时使用的 ThreadFactory 对象。

ScheduledExecutorService 接口示例:

Java


// Java Program to demonstrate 
// SchedulerExecutorService 
  
import java.util.concurrent.*; 
import java.util.*; 
import java.io.*; 
  
class SchedulerExecutorServiceExample { 
    
    public static void main(String[] args) 
    { 
        System.out.println( 
            "A count-down-clock program that counts from 10 to 0"); 
  
        // creating a ScheduledExecutorService object 
        ScheduledExecutorService scheduler 
            = Executors.newScheduledThreadPool(11); 
  
        // printing the current time 
        System.out.println( 
            "Current time : "
            + Calendar.getInstance().get(Calendar.SECOND)); 
  
        // Scheduling the tasks 
        for (int i = 10; i >= 0; i--) { 
            scheduler.schedule(new Task(i), 10 - i, 
                               TimeUnit.SECONDS); 
        } 
  
        // remember to shutdown the scheduler 
        // so that it no longer accepts 
          // any new tasks 
        scheduler.shutdown(); 
    } 
} 
  
class Task implements Runnable { 
    private int num; 
    public Task(int num) { this.num = num; } 
    public void run() 
    { 
        System.out.println( 
            "Number " + num + " Current time : "
            + Calendar.getInstance().get(Calendar.SECOND)); 
    } 
}

输出:

A count-down-clock program that counts from 10 to 0
Current time : 28
Number 10 Current time : 28
Number 9 Current time : 29
Number 8 Current time : 30
Number 7 Current time : 31
Number 6 Current time : 32
Number 5 Current time : 33
Number 4 Current time : 34
Number 3 Current time : 35
Number 2 Current time : 36
Number 1 Current time : 37
Number 0 Current time : 38

这是一个从 10 计数到 0 的倒计时时钟。ScheduledExexutorService 对象即;调度程序是使用 Executors.newScheduledThreadPool(int corePoolSize) 方法创建的。

注意:之后执行的所有任务(10 - 一世)调用延迟秒数schedule()方法。输出中的当前时间值可能会根据执行时间而变化。

ScheduledExecutorService的方法

METHOD

DESCRIPTION

日程(可运行命令,长时间延迟,TimeUnit单元) 提交 one-shot 任务,该任务在给定延迟后启用。
日程(可调用<V>可调用,长延时,TimeUnit单元) 提交 value-returning one-shot 任务,该任务在给定延迟后启用。
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 提交一个定期操作,该操作首先在给定的初始延迟后启用,然后在给定的时间段内启用;也就是说,执行将在initialDelay之后开始,然后是initialDelay + period,然后是initialDelay + 2 * period,依此类推。
scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) 提交一个周期性操作,该操作在给定的初始延迟后首先启用,然后在一次执行终止和下一次执行开始之间具有给定的延迟。

接口 java.util.concurrent.Executor 中声明的方法

METHOD

DESCRIPTION

execute(Runnable command) 在将来的某个时间执行给定的命令。

接口 java.util.concurrent.ExecutorService 中声明的方法

METHOD

DESCRIPTION

awaitTermination(long timeout, TimeUnit unit) 阻塞,直到所有任务在关闭请求后完成执行,或者发生超时,或者当前线程被中断,以先发生者为准。
invokeAll(Collection<? 扩展 Callable<T>> 任务) 执行给定的任务,在全部完成时返回保存其状态和结果的 Future 列表。
invokeAll(Collection<? 扩展 Callable<T>> 任务,长时间超时,TimeUnit 单元) 执行给定的任务,当所有任务完成或超时到期(以先发生者为准)时,返回保存其状态和结果的 Future 列表。
invokeAny(Collection<? 扩展 Callable<T>> 任务) 执行给定的任务,返回已成功完成的任务的结果(即,不引发异常)(如果有)。
invokeAny(Collection<? 扩展 Callable<T>> 任务,长时间超时,TimeUnit 单元) 执行给定的任务,返回已成功完成的任务的结果(即,不引发异常)(如果在给定超时之前有任何执行)。
isShutdown() 如果此执行器已关闭,则返回 true。
isTerminated() 如果关闭后所有任务均已完成,则返回 true。
shutdown() 启动有序关闭,其中执行先前提交的任务,但不会接受新任务。
shutdownNow() 尝试停止所有正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。
submit(Runnable task) 提交一个 Runnable 任务来执行并返回一个表示该任务的 Future。
submit(Runnable task, T result) 提交一个 Runnable 任务来执行并返回一个表示该任务的 Future。
提交(Callable<T> 任务) 提交 value-returning 任务以供执行,并返回表示任务待处理结果的 Future。


相关用法


注:本文由纯净天空筛选整理自samufo大神的英文原创作品 ScheduledExecutorService Interface in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。