JDK源碼分析之concurrent包(一) -- Executor架構

  Java5新出的concurrent包中的API,是一些併發編程中實用的的工具類。在高併發場景下的使用很是普遍。筆者在這作了一個針對concurrent包中部分經常使用類的源碼分析系列。本系列針對的讀者是已經對併發包中的Executor框架和工具類有所瞭解並懂得如何使用的人羣,若是對併發包還不瞭解的朋友,請先作些瞭解。網上對這方面的講述有豐富的資源。編程

  本篇博文是第一期,首先對Executor架構作一個概述。這裏只簡單介紹接口和類的繼承、使用關係。架構

  盜用一張類圖來描述結構:併發

解析:

  • Executor是總的接口,用來執行Runnable任務;
  • ExecutorService是Executor的擴展接口,主要擴展了執行Runnable或Callable任務的方式,及shutdown的方法;
  • ScheduledExecutorService是ExecutorService的擴展接口,主要擴展了能夠用任務調度的形式(延遲或按期)執行Runnable或Callable任務;
  • AbstractExecutorService是ExecutorService接口的實現類,是抽象類,提供一些默認的執行Runnable或Callable任務的方法;
  • ThreadPoolExecutor是AbstractExecutorService的子類,是線程池的實現;
  • ScheduledThreadPoolExecutor是ThreadPoolExecutor的子類,實現ScheduledExecutorService接口,基於線程池模式的多任務調度,是Timer工具類的高性能版;
  • Callable與Future是Runnable的另外的形式,用來異步獲取任務執行結果;
  • 最後,Executors是工具類,用於建立上述各類實例。

  此外,CompletionService接口能夠認爲是Executor的一個分支,注意這裏CompletionService並非Executor的子接口,上圖可能會讓部分讀者產生歧義。CompletionService是用來將生產新的異步任務與使用已完成任務的結果分離開來的服務。基於Executor的任務執行,與Future搭配使用。框架

  對Executor框架的結構作了簡單的描述以後,接下來就要進入源碼解析的正篇部分了。這裏筆者計劃重點對框架中的ThreadPoolExecutor、FutureTask及一些工具類如Exchanger、CountDownLatch、CyclicBarrier、Semaphore和幾個經常使用的併發集合如ArrayBlockingQueue、ConcurrentLinkedQueue、ConcurrentHashMap、CopyOnWriteArrayList作分析。異步

  一我的的理解不免有片面和遺漏,還望各位海涵和指正。高併發

相關文章
相關標籤/搜索