最近須要實現一套多併發的事件處理模型,並且對某些事件的執行順序是有要求的,同一個用戶產生的事件須要保證執行的順序性。在網上沒找到類似的,準備本身實現。先對java提供的線程池模型有一個深度的瞭解,看一下ThreadPoolExecutor。java
ThreadPoolExecutor的繼承結構以下:併發
class ThreadPoolExecutor extends AbstractExecutorService
abstract class AbstractExecutorService implements ExecutorService
interface ExecutorService extends Executor
interface 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提供了對線程池任務的中止,狀態,任務提交,批量返回結果 接口方法spa
粗略看AbstractExecutorService抽象類線程
增長了newTaskFor方法。引入了線程池中的任務對象,接口類RunableFuture和實現類FutureTask,這兩個類能夠單獨展開。設計
實現了ExecutorService的submit和invokeAny和invokeAll方法,code
主要思想就是將runnable和callable的任務轉化爲FutureTask的任務,而後調用execute方法來執行。對象
還有shutdown和isTerminated等方法未實現。blog
目前的抽象類裏面還沒具體的extcute方法的實現,主要是實現了線程池須要的「任務提交」和「批量返回」的操做。這種設計思想主要是把一些輔助的方法都定義好,作到了即不影響實現者的核心業務實現,還避免了實現者對輔助方法的重複實現。繼承
ThreadPoolExecutor類是最核心的業務實現類,繼承了抽象類AbstractExecutorService
詳解再開一篇。