java高併發程序設計2-JDK併發包

爲什麼要有JDK併發包呢?因爲爲了多線程安全。。。。

下面主要從三個部分來了解JDK併發包(java.util.concurrent):多線程的團隊協作(同步控制)、線程複用(線程池)、不要重複發明輪子(JDK的併發容器)

一、同步控制:synchronized,ReentrantLock,Semaphore,ReadWriteLock,ThreadLocal

1、sychronized :參考文章
2、ReentrantLock : 參考文章
3、Semaphore:參考文章
4、ReadWriteLock:參考文章
5、ThreadLocal:
6、CountDownLatch:參考文章
7、CyclicBarrier:參考文章

二、線程池:

1、線程池的種類:
public static ExecutorService newFixedThreadPool(int nThreads)
public static ExecutorService newSingleThreadExecutor()
public static ExecutorService newCachedThreadPool()

public static ScheduledExecutorService newScheduledThreadPool()
public static ExecutorService newFixedThreadPool(int corePoolSize)
2、前面三個線程池的核心實現(ThreadPoolExecutor)

ThreadPoolExecutor的參數:
1、corePoolSize:
2、maximumPoolSize:
3、keepAliveTime:(非核心線程的存活時間)
4、unit:
5、workQueue:(這四個都是基於實現BlockingQueue接口來實現的)
SynchronousQueue
ArrayBlockingQueue
LinkedBlockQueue
④PriorityBlockingQueue

6、threadFactory:
7、handle:
默認的拒絕策略有四種:
在這裏插入圖片描述
AbortPolicy:該策略會直接拋出異常,阻止系統正常工作
在這裏插入圖片描述
CallerRunsPolicy:只要線程池未關閉,該策略直接在調用者線程中,運行當前被丟棄的任務。
在這裏插入圖片描述
DiscardOldestPolicy:該策略將丟棄最老的一個請求
在這裏插入圖片描述

DiscardPolicy:默默丟棄無法處理的任務,不予任何處理。如果允許任務丟失,這是最好的方式。

在這裏插入圖片描述通過上面的代碼我們可以發現這四種策略都是基於實現RejectedExecutionHandler的。這樣我們也可以自己實現這個藉口來創建拒絕策略

三、JDK併發容器

爲了解決java集合類Collection的不安全而存在
1、concurrentHashMap---->HashMap
2、CopyOnWriteArrayList—>ArrayList
3、ConcurrentLinkedQueue—>LinkedList(高效的併發隊列)
4、BlockingQueue(這是一個接口。功能用途超級多的一個阻塞隊列)
5、ConcurrentSkipListMap(用來進行快速查找)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章