JavaTM 2 Platform
Standard Ed. 6

java.util.concurrent
介面 Executor

所有已知子介面:
ExecutorService, ScheduledExecutorService
所有已知實作類別:
AbstractExecutorService, ScheduledThreadPoolExecutor, ThreadPoolExecutor

public interface Executor

執行已提交的 Runnable 任務的物件。此介面提供一種將任務提交與每個任務將如何運行的機制(包括執行緒使用的細節、排程等)分離開來的方法。通常使用 Executor 而不是顯式地創建執行緒。例如,可能會使用以下方法,而不是為一組任務中的每個任務調用 new Thread(new(RunnableTask())).start()

 Executor executor = anExecutor;
 executor.execute(new RunnableTask1());
 executor.execute(new RunnableTask2());
 ...
 
不過,Executor 介面並沒有嚴格地要求執行是非同步的。在最簡單的情況下,執行程序可以在調用者的執行緒中立即運行已提交的任務:
 class DirectExecutor implements Executor {
     public void execute(Runnable r) {
         r.run();
     }
 }
更常見的是,任務是在某個不是調用者執行緒的執行緒中執行的。以下執行程序將為每個任務產生一個新執行緒。
 class ThreadPerTaskExecutor implements Executor {
     public void execute(Runnable r) {
         new Thread(r).start();
     }
 }
許多 Executor 實作都對排程任務的方式和時間強加了某種限制。以下執行程序使任務提交與第二個執行程序保持連續,這說明了一個復合執行程序。
 class SerialExecutor implements Executor {
     final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
     final Executor executor;
     Runnable active;

     SerialExecutor(Executor executor) {
         this.executor = executor;
     }

     public synchronized void execute(final Runnable r) {
         tasks.offer(new Runnable() {
             public void run() {
                 try {
                     r.run();
                 } finally {
                     scheduleNext();
                 }
             }
         });
         if (active == null) {
             scheduleNext();
         }
     }

     protected synchronized void scheduleNext() {
         if ((active = tasks.poll()) != null) {
             executor.execute(active);
         }
     }
 }
此套件中提供的 Executor 實作實作了 ExecutorService,這是一個使用更廣泛的介面。ThreadPoolExecutor 類別提供一個可擴展的執行緒池實作。Executors 類別為這些 Executor 提供了便捷的處理器方法。

記憶體一致性效果:執行緒中將 Runnable 物件提交到 Executor 之前的操作 happen-before 其執行開始(可能在另一個執行緒中)。

從以下版本開始:
1.5

方法摘要
 void execute(Runnable command)
          在未來某個時間執行給定的命令。
 

方法詳細資訊

execute

void execute(Runnable command)
在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正調用的執行緒中執行,這由 Executor 實作決定。

參數:
command - 可運行的任務
拋出:
RejectedExecutionException - 如果不能接受執行此任務。
NullPointerException - 如果命令為 null

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only