當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。