1. 程式人生 > >java.util.concurrent.Executor 介面 原始碼

java.util.concurrent.Executor 介面 原始碼

執行緒池相關

原始碼:

public interface Executor {
    void execute(Runnable command);
}

介面 Executor

已知子介面:

    ExecutorServiceScheduledExecutorService

已知實現類:

    AbstractExecutorService,ThreadPoolExecutorScheduled,ThreadPoolExecutor

    執行已提交的 Runnable 任務的物件。

    此介面將任務提交與每個任務如何執行的機制分離開來。通常使用 Executor 而不是顯式地建立執行緒。例如,可能會使用以下方法,而不是為一組任務中的每個任務呼叫 new Thread(new(RunnableTask())).start():

    Executor executor = new executor介面的實現;
    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) {//如果正在執行的執行緒為null,即說明佇列之前為空的狀態.此時當前執行緒節點應當立即執行
             scheduleNext();//執行當前的頭節點執行緒
         }
     }

     //使得當前頭節點執行
     protected synchronized void scheduleNext() {
         if ((active = tasks.poll()) != null) {//poll():得到當前頭節點並移除;若返回的節點不為null
             executor.execute(active);//執行當前節點
         }
     }
 }

    此包中提供的 Executor 實現了 ExecutorService,這是一個使用更廣泛的介面。

 ThreadPoolExecutor 類實現了ExecutorService提供了一個可擴充套件的執行緒池實現。 

    Executors 類為這些 Executor 提供了便捷的工廠方法。

 

方法摘要

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

 

execute

void execute(Runnable command)

    在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由 Executor 實現決定。

    引數:

    command - 可執行的任務

    丟擲:

    RejectedExecutionException - 如果不能接受執行此任務。

    NullPointerException - 如果命令為 null