Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

Java - 使用示例排程執行緒



Java 是一種多執行緒程式語言,這意味著我們可以使用 Java 開發多執行緒程式。多執行緒程式包含兩個或多個可以同時執行的部分,每個部分可以同時處理不同的任務,從而最佳化可用資源的使用,尤其是在您的計算機具有多個 CPU 的情況下。

根據定義,多工處理是指多個程序共享 CPU 等公共處理資源。多執行緒將多工處理的概念擴充套件到應用程式中,您可以在其中將單個應用程式內的特定操作細分為單獨的執行緒。每個執行緒都可以並行執行。作業系統不僅在不同的應用程式之間分配處理時間,而且還在應用程式內的每個執行緒之間分配處理時間。

多執行緒使您能夠以多種活動可以在同一程式中併發進行的方式編寫程式。

Java 提供了一個java.util.concurrent.ScheduledExecutorService介面,它是 ExecutorService 介面的子介面,並支援任務/執行緒的未來和/或定期執行。以下是此介面的一些重要且有用的方法。

ScheduledExecutorService 方法

序號 方法和描述
1

<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)

建立並執行一個 ScheduledFuture,該 ScheduledFuture 在給定延遲後啟用。

2

ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)

建立並執行一個一次性操作,該操作在給定延遲後啟用。

3

ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

建立並執行一個週期性操作,該操作首先在給定的初始延遲後啟用,然後以給定的週期啟用;也就是說,執行將在 initialDelay 後開始,然後是 initialDelay+period,然後是 initialDelay + 2 * period,依此類推。

4

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

建立並執行一個週期性操作,該操作首先在給定的初始延遲後啟用,然後在一次執行終止與下一次執行開始之間以給定的延遲啟用。

示例 1

以下 TestThread 程式展示瞭如何在基於執行緒的環境中使用 ScheduledExecutorService 介面來安排任務,以在 2 秒後以 2 秒的間隔在 10 秒的時間段內執行,展示了 scheduleAtFixedRate() 和 schedule() 方法的使用。

package com.tutorialspoint;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedRate(new BeepTask(), 2, 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

輸出

beep
beep
beep
beep
beep

示例 2

以下 TestThread 程式展示瞭如何在基於執行緒的環境中使用 ScheduledExecutorService 介面,以排程任務在 2 秒後開始執行,並在 10 秒的時間段內每隔 2 秒執行一次,演示了 scheduleAtFixedDelay() 和 schedule() 方法的用法。

package com.tutorialspoint;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedDelay(new BeepTask(), 2, 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

輸出

beep
beep
beep
beep

示例 3

以下 TestThread 程式展示瞭如何在基於執行緒的環境中使用 ScheduledExecutorService 介面,以排程任務在 2 秒後執行一次,並在 10 秒的時間段內演示 schedule() 方法的用法。

package com.tutorialspoint;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.schedule(new BeepTask(), 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

輸出

beep
廣告