java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
?ConcurrentLinkedQueue是一個基于鏈接節(jié)點的無界線程安全隊列,它采用先進先出的規(guī)則對節(jié)點進行排序,當我們添加一個元素的時候,它會添加到隊列的尾部;當我們獲取一個元素時,它會返回隊列頭部的元素。它采用了“wait-free”算法(即CAS算法)來實現(xiàn)。
阻塞隊列BlockingQueue:
Java里的阻塞隊列
ArrayBlockingQueue 通過?ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000,true);保證線程公平訪問隊列。
看下構(gòu)造方法:
public ArrayBlockingQueue(int capacity, boolean fair) {if (capacity <= 0)throw new IllegalArgumentException();this.items = new Object[capacity];lock = new ReentrantLock(fair);notEmpty = lock.newCondition();notFull = lock.newCondition();}使用可重入鎖實現(xiàn)。
DelayQueue使用場景:
?
SynchronousQueue是一個不存儲元素的阻塞隊列。每一個put操作必須等待一個take操作,否則不能繼續(xù)添加元素。
它支持公平訪問隊列。默認情況下線程采用非公平性策略訪問隊列。
SynchronousQueue的吞吐量高于LinkedBlockingQueue和ArrayBlockingQueue。
Fork Join框架:
Fork/Join框架是Java 7提供的一個用于并行執(zhí)行任務(wù)的框架,是一個把大任務(wù)分割成若干個小任務(wù),最終匯總每個小任務(wù)結(jié)果后得到大任務(wù)結(jié)果的框架。
工作竊取算法:
優(yōu)點:充分利用線程并行計算,減少線程間競爭。
缺點:在某些情況下還是存在競爭,比如雙端隊列里只有一個任務(wù)時。并且該算法會消耗了更多的系統(tǒng)資源,比如創(chuàng)建多個線程和多個雙端隊列。
?
框架設(shè)計:
?
總結(jié)
以上是生活随笔為你收集整理的java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu ls可以查看到文件,图形界
- 下一篇: WIFI配置专项测试