多執行緒互動使用的資料結構,了解一下

2021-08-21 19:27:32 字數 1761 閱讀 3354

/*

* 多執行緒之間互動

* 執行緒閥是一種執行緒與執行緒之間相互制約和互動的機制

* *

* 阻塞佇列blockingqueue

* * queue 佇列:先進顯出

* deque 雙端佇列:兩端都可以進出的佇列,當約束一端的時候就成了棧結構

* * 阻塞佇列 blockingqueue 是乙個支援兩個附加操作的佇列

* 在隊列為空時,獲取元素的執行緒會等待佇列變為非空

* 當佇列滿時:儲存元素的執行緒會等佇列可用

* * 阻塞佇列常用於生產者和消費者的場景

*/public

static

void main(string args) {

/** 陣列阻塞佇列

* 典型的有界快取區

*/arrayblockingqueue arrayblockingqueue = new arrayblockingqueue<>(1);

/** 鍊錶阻塞佇列

*/linkedblockingdeque linkedblockingdeque = new linkedblockingdeque<>();

//優先順序阻塞佇列 支援優先順序排序的無界佇列

// 優先順序的判斷痛毆建構函式傳入的compator物件決定

// 不會阻塞資料的生產者,只會沒有可消費的資料時,阻塞資料的消費者

// 生產者速度快於消費者速度,時間一長,會耗盡所有的可用堆記憶體空間

// 內部控制線程同步的鎖採用的是公平鎖

priorityblockingqueue priorityblockingqueue = new priorityblockingqueue<>();

// 延時佇列

// 快取系統的設計

// 定時任務排程

// 作為delayqueue元素的時候必須實現delayed介面的兩個方法

delayqueuedelayqueue = new delayqueue<>();

// 同步佇列

// 是乙個不儲存元素的阻塞佇列,每乙個put操作必須等待乙個take操作,否則不能繼續新增元素,

// 負責傳遞資料,

// 本身不存任何元素

// 兩種機制

// 公平模式 :阻塞多餘的生產和消費者

// 非公平模式:很容易出現飢渴現象

synchronousqueue synchronousqueue = new synchronousqueue<>();

// 鍊錶雙向阻塞佇列

linkedblockingdeque linkedblockingdeque2 = new linkedblockingdeque<>();

// 鍊錶傳輸佇列

// 是乙個由鍊錶結構組成的無界傳輸阻塞佇列

// 雙重資料結構

// 方法都是通過兩個步驟完成:保留與完成

linkedtransferqueue linkedtransferqueue = new linkedtransferqueue<>();

這些都沒用過,也沒見人用過,專案中用的是redis佇列

就當是了解了吧,

執行緒 ThreadLocal使用及資料結構

1 threadlocal的使用 threadlocal的確是資料的隔離,但是並非資料的複製,而是在每乙個執行緒中建立乙個新的資料物件,然後每乙個執行緒使用的是不一樣的。public class threadlocaltest public integer getnextstr public sta...

對於資料結構的初步了解

對於資料結構在我沒學這門課程之前對它的理解是 資料結構是可以把很多資料整合到一起,然後寫乙個適合處理這批資料的演算法,這樣可以節省計算機的記憶體。但是學完第一章緒論後我對這門課有了更深刻的理解。首先是對資料結構的組成有了了解 1.資料的邏輯結構 2.資料的儲存結構 3.資料的運算 邏輯結構的表示 1...

C 多執行緒的使用 一

一.本次主要對以下3點進行輸出 1.執行緒的建立 2.前台執行緒與後台執行緒 3.執行緒的優先順序 二.準備工作 1.using system.threading 引用執行緒類 2.建立winform窗體及控制項 三.程式說明 thread drawthread null 定義執行緒1,並設定其初始...