java8線程和異步常用的類

1.java.lang包

  • 接口
    • Runnable:提供一個無參的run(),其實例將由線程執行;
    • Thread.UncaughtExceptionHandler(線程異常處理): -
      • 當線程由於未捕獲的異常而終止時,將調用該接口;
      • 如果線程沒有設置,將調用ThreadGroup;
      • 如果ThreadGroup沒有處理,將調用默認的線程異常處理接口;
    • Thread(線程):java程序中執行的線程;
    • ThreadGroup(線程組):代表一組線程,繼承了UncaughtExceptionHandler;
    • ThreadLocal(線程局部變量):詳解,每個線程都有自己獨立初始化的變量副本;
    • InheritableThreadLocal(可繼承線程局部變量):詳解,擴展了ThreadLocal,子線程可繼承父線程的線程局部變量;
    • Thread.State(線程狀態):枚舉類,表示線程的幾種狀態
      • NEW 尚未啓動的線程
      • RUNNABLE 執行的線程
      • BLOCKED 被阻塞等待監視器鎖定
      • WAITING 正在等待另一個線程執行
      • TIMED_WAITING 正在等待另一個線程執行一定時間
      • TERMINATED 已退出

2.java.util.concurrent包

線程池

CompletionService
  • ExecutorService提交任務後,根據添加到線程池中的順序,依次獲取結果,獲取不到就阻塞
  • CompletionService提交任務後,按任務完成的順序獲取結果,最先完成的任務最早獲取結果
    • ExecutorCompletionService 使用Executor執行任務的CompletionService
Executor
  • 執行已提交的 Runnable 任務的對象
  • 提供將任務提交與每個任務將如何運行的機制(包括線程使用的細節、調度等)分離的方法
  • 通常使用 Executor 而不是顯式地創建線程
    • ExecutorService
      • 可終止執行,並可獲取返回結果Future
      • Executors提供創建ExecutorService及其子類對象的工廠方法,通常用此工廠方法創建ExecutorService對象
      • ScheduledExecutorService
        • 可在指定延遲後運行或定期執行的ExecutorService
        • ScheduledThreadPoolExecutor ScheduledExecutorService的實現
      • AbstractExecutorService ExecutorService法的默認抽象實現
        • ForkJoinPool ExecutorService的實現,支持工作竊取算法
        • ThreadPoolExecutor
          • ExecutorService的實現,使用幾個池線程之一執行任務,通常使用Executors工廠方法配置

線程相關

Callable
  • 類似於Runnable,由另一個線程執行的類設計的
  • 可以返回結果,能拋出被檢查的異常
ForkJoinWorkerThread
  • 由ForkJoinPool管理的線程,執行ForkJoinTask
Delayed
  • 標識接口,標記應該在給定延遲時間之後執行的對象
CompletionStage
  • 用於異步執行中的階段處理,只有CompletableFuture一個實現類
  • 階段執行的計算可以表示爲功能,消費者或可運行(分別使用名稱包括apply , accept或run的方法),具體取決於是否需要參數和/或生成結果
  • 示例:stage.thenApply(x -> square(x)).thenAccept(x -> System.out.print(x)).thenRun(() -> System.out.println())
Future
  • 表示異步計算的結果,使用get方法返回的結果
    • RunnableFuture
      • 帶有run方法的Future,使用run方法計算的結果作爲Future的get方法返回的結果
      • FutureTask 可取消的Future
    • ScheduledFuture
      • 延遲執行的Future
      • RunnableScheduledFuture
        • 延遲執行的RunnableFuture
    • CompletableFuture
      • 實現了Future和CompletionStage兩個接口,提供強大的Future的擴展功能
      • 提供了函數式編程的能力,極大的簡化異步編程的複雜性
      • 提供了異步執行中的階段處理,提供了轉換和組合功能
    • ForkJoinTask
      • 在ForkJoinPool內運行的任務的抽象基類,ForkJoinTask是一個輕量的線程實體
      • 可被分解的異步任務, fork()分解子任務並異步執行,執行完成後join()連接結果
      • 任務應避免使用synchronized方法或塊,並應儘可能減少其他阻塞同步
      • 可分割的任務不應該執行阻塞I/O
      • 不允許拋出IOExceptions之類的受檢查異常
      • CountedCompleter
        • 在任務完成時檢查是否有等待的任務,若沒有則觸發一個完成動作
      • RecursiveAction 無返回結果的ForkJoinTask
      • RecursiveTask 有返回結果的ForkJoinTask

集合

BlockingQueue
  • 線程安全的阻塞隊列,FIFO一端入隊列,一端出隊列,主要用於生產者-消費者隊列
  • 繼承Collection接口,支持remove(x)操作,但效率不高
  • 不接受null
    • BlockingDeque
      • 雙端阻塞隊列,兩端都可以進隊列,也可以出隊列(putFirst,takeFirst,putLast,takeLast)
      • DelayQueue 無界阻塞隊列,在延遲期滿時才能從中提取元素
      • LinkedBlockingDeque 基於鏈表的雙端阻塞隊列
    • TransferQueue
      • 生產者可使用方法transfer(E)傳送消息,並一直等待直到消費者調用take或poll接收消息
      • LinkedTransferQueue 基於鏈表的無界TransferQueue
    • ArrayBlockingQueue
      • 由數組支持的有界阻塞隊列,列按FIFO(先進先出)原則對元素進行排序
    • LinkedBlockingQueue 基於鏈表的無界阻塞隊列
    • PriorityBlockingQueue 基於優先級的無界阻塞隊列
    • SynchronousQueue
      • 沒有任何內部容量,插入操作必須等待另一個線程的對應移除操作的阻塞隊列
ConcurrentMap
  • 線程安全的map集合
    • ConcurrentNavigableMap 可返回其導航視圖的線程安全的map集合
      • ConcurrentSkipListMap
        • 可以根據鍵的自然順序進行排序,也可以根據創建時提供的Comparator進行排序
    • ConcurrentHashMap
      • 線程安全的HashMap,功能與Hashtable相同,但效率更高
      • ConcurrentHashMap.KeySetView ConcurrentHashMap鍵的線程安全集合
      • ConcurrentHashMap.ValuesView ConcurrentHashMap值的線程安全集合
      • ConcurrentHashMap.EntrySetView ConcurrentHashMap鍵值對的線程安全集合
其它Concurrent集合
  • ConcurrentLinkedDeque 高效的無界雙端非阻塞隊列
  • ConcurrentLinkedQueue 高效的無界線程安全非阻塞隊列
  • ConcurrentSkipListSet
    • 線程安全的Set,可以根據自然順序進行排序,也可以根據創建時提供的Comparator進行排序
其它線程安全的集合
  • CopyOnWriteArrayList
    • 線程安全的ArrayList,add/remove非消耗資源
  • CopyOnWriteArraySet
    • 線程安全的Set,內部使用CopyOnWriteArrayList實現,add/set/remove非消耗資源

工具和處理

TimeUnit
  • 表示給定的粒度單位的持續時間,提供了跨單元轉換的實用方法
  • 可表示執行定時和延遲操作
Executors
  • 包含Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable類的工廠和實用方法
ForkJoinPool.ForkJoinWorkerThreadFactory
  • 創建ForkJoinWorkerThread的工廠
ForkJoinPool.ManagedBlocker
  • 擴展管理並行性的接口,用於在ForkJoinPool中運行的任務
ThreadFactory
  • 創建一個新線程的線程工廠
    • SimpleThreadFactory 創建新線程
    • Executors.DefaultThreadFactory 創建指定分組和名稱的新線程
CompletableFuture.AsynchronousCompletionTask
  • 標識接口,用於標識由async方法產生的async任務,用於監視,調試和跟蹤異步活動
  • 全部實現類都是CompletableFuture內部類
RejectedExecutionHandler
  • 無法由ThreadPoolExecutor執行的任務的處理程序
  • 關閉Executor時可能發生execute不能接受任務,Executor便會調用此對象的rejectedExecution方法
    • ThreadPoolExecutor.AbortPolicy 拋出一個RejectedExecutionException
    • ThreadPoolExecutor.CallerRunsPolicy 直接在 execute方法的調用線程中運行被拒絕的任務
    • ThreadPoolExecutor.DiscardOldestPolicy 丟棄最舊的未處理請求,然後重試execute
    • ThreadPoolExecutor.DiscardPolicy 默默地丟棄被拒絕的任務
Exchanger
  • 可以在對中對元素進行配對和交換的線程的同步點
CountDownLatch
  • 同步輔助類,在完成一組正在其他線程中執行的操作之前,允許一個或多個線程一直等待
CyclicBarrier
  • 一個同步輔助類,允許一組線程互相等待,直到到達某個公共屏障點(common barrier point)
Phaser
  • 可重複使用的同步屏障,功能類似於CyclicBarrier和CountDownLatch,但支持更靈活的使用
Semaphore
  • 計數信號量
ThreadLocalRandom
  • 線程安全的隨機數生成器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章