併發程式設計(四)

2021-08-16 00:01:08 字數 1702 閱讀 6569

在併發佇列上jdk提供了兩套實現,乙個是以concurrentlinkedqueue為代表的高效能佇列,乙個是以blockingqueue介面為代表的阻塞佇列,無論哪種都繼承自queue。

1、concurrentlinkedqueue:是乙個適用於高併發場景下的佇列,通過無鎖的方式,實現了高併發狀態下的高效能,通常concurrentlinkedqueue效能好於blockingqueue。它是乙個基於鏈結節點的無界線程安全佇列。該佇列的元素遵循先進先出的原則。頭是最先加入的,尾是最近加入的,該佇列不允許null元素。

concurrentlinkedqueue重要方法:

add()和offer()都是加入元素的方法(在concurrentlinkedqueue中,這兩個方法沒有任何區別)

poll()和peek()都是取頭元素節點,區別在於前者會刪除元素,後者不會。

public static void main(string args) throws exception 

listlist = new arraylist();

system.out.println(q.drainto(list, 3));

system.out.println(list.size());

for (string string : list)

*/final synchronousqueueq = new synchronousqueue();

thread t1 = new thread(new runnable() catch (interruptedexception e)

}});

t1.start();

thread t2 = new thread(new runnable()

});t2.start();

}}

priorityblockingqueue(優先順序阻塞queue)

:基於優先順序的阻塞佇列(優先順序的判斷通過構造方法函式傳入的compator物件來決定,也就是說傳入佇列的物件必須實現comparable介面),在實現priorityblockingqueue時,內部控制線程同步的鎖採用的是公平鎖,他也是乙個無界的佇列。

delayqueue(延遲的queue)

:帶有延遲時間的queue,其中的元素只有當其指定的延遲時間到了,才能夠從佇列中獲取到該元素。delayqueue中的元素必須實現delayed介面,delayqueue是乙個沒有大小限制的佇列,應用場景很多,比如對快取超時的資料進行移除、任務超時處理、空閒鏈結的關閉等等。(網咖上網根據2元、5元、10元,取佇列的值,下機)

public class task implements comparable

public void setid(int id)

public string getname()

public void setname(string name)

@override

public int compareto(task task)

public string tostring()

}

public class usepriorityblockingqueue 

}

併發程式設計 四

是指乙個執行緒a呼叫了物件o的wait 方法進入等待狀態,而另乙個執行緒b呼叫了物件o的notify 或者notifyall 方法,執行緒a收到通知後從物件o的wait 方法返回,進而執行後續操作。上述兩個執行緒通過物件o來完成互動,而物件上的wait 和notify notifyall 的關係就如...

併發程式設計(四)

上篇部落格介紹了程序的建立,程序的相關屬性以及三種特殊程序 殭屍程序,孤兒程序和守護程序.守護程序是乙個在後台執行並且不受任何終端控制的程序,用於執行特定的系統任務.很多守護程序在系統引導的時候啟動,並且一直執行直到系統關閉.另一些只在需要的時候才啟動,完成任務後就自動結束.本篇部落格詳細介紹守護程...

併發程式設計框架篇(四)

一 disruptor框架 1 disruptor礦機在jvm平台上,其核心是乙個業務邏輯處理器,它能夠在乙個執行緒裡每秒處理6百萬訂單 業務邏輯處理器完全是在記憶體中,使用事件源驅動方式。業務邏輯處理器的核心是disruptor。2 disruptor它是乙個開源的併發框架,並獲得2011 duk...