併發編程中級篇一

同步類容器前端

同步類容器都是線程安全的後端

同步類容器包括 Vector HashTable 。
這些容器的同步方法都是使用JDK的 Collections.synchronizedCollection,synchronizedMap,synchronizedList等工廠方法去建立實現的。其底層的機制就是對於使用synchronized關鍵字對於每個公用的方法進行同步數組


併發類容器
是專門爲併發而設計的
使用ConcurrentHashMap來替代 hashTable
使用CopyOnWriteArrayList來替代Vector
以及併發的CopyOnWriteArraySet
ConcurrentLinkedQueue 高性能的隊列
LinkedBlockingQueue 阻塞形式的隊列緩存


ConrrentHashMap安全

concurrentMap 接口有2個實現類 CorrentSkipListMap(支持排序),ConcurrentHashMap併發

底層原理 把一個總體分爲16個段 每個段就是一個hashtable 經過減少鎖的粒度倆較少鎖競爭的問題高併發

ConcurrentHashMap<String, Object> c= new ConcurrentHashMap<String, Object>();

CopyOnWrite
包含2個類CopyOnWriteArrayList CopyOnWriteArraySet 性能

CopyOnWrite是寫時複製的容器 當往容器添加元素的時候 是先copy一份 然佛操做新的數據 最後指向該數據線程

CopyOnWriteArrayList<String> cwal = new CopyOnWriteArrayList<String>();
CopyOnWriteArraySet<String> cwas = new CopyOnWriteArraySet<String>();

併發Queue
以ConcurrentLinkedQueue 爲表明的高性能的隊列
以BlockingQueue爲接口爲表明的阻塞隊列設計

ConcurrentLinkedQueue 高性能無阻塞無界隊列
是一個適用於高併發場景下的隊列 經過無鎖的方式 實現了併發狀態下的高性能

ConcurrentLinkedQueue<String> q = new ConcurrentLinkedQueue<String>();
    q.offer("a");//添加
    q.add("e");//添加
    q.poll("a");//一處頭元素 並刪除
    q.peel("a");//只移除不刪除

BlockingQueue接口

ArrayBlockingQueue 是基於數組的阻塞隊列實現 在ArrayBlockingQueue 內部 維護了一個定長數據一遍緩存隊列中的數據對象。內部沒有實現讀寫分離 也叫有界隊列

ArrayBlockingQueue<String> array = new ArrayBlockingQueue<String>(5);

LinkedBlockingQueue 是基於鏈表的阻塞隊列內部維護者一個緩衝隊列了 其內部採用了分離鎖 實現了讀寫2個鎖 讀寫分離 是無界隊列

LinkedBlockingDeque<String> dq = new LinkedBlockingDeque<String>(10);
    dq.addFirst("a");
    System.out.println("查看頭元素:" + dq.peekFirst());

synchronousQueue 無緩衝隊列

PriorityBlockingQueue 是基於優先級的阻塞隊列 使用了公平鎖 是無界隊列

PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>();
    //Task類 須要實現Comparable接口 而後重寫CompareTo()方法

DelayQueue 帶有延遲時間的Queue

public class Wangmin implements Delayed{ 
    
    }

    public class WangBa implements Runnable {  
        
        private DelayQueue<Wangmin> queue = new DelayQueue<Wangmin>();  
        
     }

Deque 雙端隊列

LinkedBlockingDqueue是線程安全的雙端隊列的實現。在內部維護了前端和後端節點,沒有實現讀寫分離,效率要低於其餘Blocking隊列

相關文章
相關標籤/搜索