Java多线程-Executor框架:ScheduledThreadPoolExecutor

时间:2021-08-18 20:33:36

构造函数:

  • public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
    创建一个支持定时或周期性的执行任务的线程池,多数情况下可用来替代Timer类。

执行方法:

  • schedule(Callable/Runnable, long,TimeUnit)
    第一个参数:任务
    第二个参数:任务执行前等待的时间
    第三个参数:第二个参数的时间单位。
  • scheduleAtFixedRate(Runnable ,long ,long ,TimeUnit )
    第一个参数:周期性执行的任务,
    第二个参数:第一次执行前的等待的时间
    第三个参数:两个任务的启动时间的间隔
    第四个参数:时间单位
    注意:该方法有返回值ScheduledFuture
  • scheduleWithFixedDelay(Runnable ,long ,long ,TimeUnit )
    第一个参数:周期性执行的任务,
    第二个参数:第一次执行前的等待的时间
    第三个参数:两个任务的时间间隔
    第四个参数:时间单位
    注意:该方法有返回值ScheduledFuture

public static void main(String[] args){
ScheduledExecutorService executor = Executors.newScheduledThreadPool(10);
// 延迟5秒执行任务
executor.schedule(new Task(), 5, TimeUnit.SECONDS);

executor.shutdown();
while(!executor.isTerminated()){};
}

public static class Task implements Runnable{
@Override
public void run() {
//TODO.
}
}

ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
Task task=new Task();
ScheduledFuture<?> resultFuture=executor.scheduleAtFixedRate(task, 0, 2, TimeUnit.SECONDS);

for(int i=0;i<10;i++){
System.out.println(
resultFuture.getDelay(TimeUnit.MILLISECONDS));
// Thread.sleep(1000);
};
executor.shutdown();