java7 ThreadPoolExecutor類詳解——類結構

最近須要實現一套多併發的事件處理模型,並且對某些事件的執行順序是有要求的,同一個用戶產生的事件須要保證執行的順序性。在網上沒找到類似的,準備本身實現。先對java提供的線程池模型有一個深度的瞭解,看一下ThreadPoolExecutor。java

ThreadPoolExecutor的繼承結構以下:併發

class ThreadPoolExecutor extends AbstractExecutorService
abstract class AbstractExecutorService implements ExecutorService
interface ExecutorService extends Executor
interface Executor

Executor

public interface Executor {

    /**
     * Executes the given command at some time in the future.  The command
     * may execute in a new thread, in a pooled thread, or in the calling
     * thread, at the discretion of the {@code Executor} implementation.
     *
     * @param command the runnable task
     * @throws RejectedExecutionException if this task cannot be
     * accepted for execution
     * @throws NullPointerException if command is null
     */
    void execute(Runnable command);
}

一個執行提交的runnable任務的對象。這個接口提供了一種解耦任務的提交和執行的方式。它替代了那種顯式的建立線程執行的方式this

new Thread(new(RunnableTask())).start()

ExecutorService

ExecutorService提供了對線程池任務的中止,狀態,任務提交,批量返回結果 接口方法spa

AbstractExecutorService

粗略看AbstractExecutorService抽象類線程

增長了newTaskFor方法。引入了線程池中的任務對象,接口類RunableFuture和實現類FutureTask,這兩個類能夠單獨展開。設計

實現了ExecutorService的submit和invokeAny和invokeAll方法,code

    主要思想就是將runnable和callable的任務轉化爲FutureTask的任務,而後調用execute方法來執行。對象

還有shutdown和isTerminated等方法未實現。blog

目前的抽象類裏面還沒具體的extcute方法的實現,主要是實現了線程池須要的「任務提交」和「批量返回」的操做。這種設計思想主要是把一些輔助的方法都定義好,作到了即不影響實現者的核心業務實現,還避免了實現者對輔助方法的重複實現。繼承

ThreadPoolExecutor

ThreadPoolExecutor類是最核心的業務實現類,繼承了抽象類AbstractExecutorService

詳解再開一篇。

相關文章
相關標籤/搜索