concurrent包是jdk1.5所提供的乙個針對高併發進行程式設計的包。
遵循先進先出(fifo)的原則。阻塞式佇列本身使用的時候是需要指定界限的。
在生產者消費者模型中,生產資料和消費資料的速率不一致,如果生產資料速度快一些,消費(處理)不過來,就會導致資料丟失。這時候我們就可以應用上阻塞佇列來解決這個問題。
底層是基於陣列來進行儲存,使用的時候需要指定乙個容量,容量指定之後不可改變。--- 生產 - 消費模型
public static void main(string args) throws interruptedexception
底層是基於鍊錶(節點)來進行資料的儲存。在使用的時候可以指定初始容量,也可以不指定。
如果指定了容量,就以指定的容量為準來進行儲存;
如果不指定容量,那麼預設容量是 integer.max_value -> 231 - 1。如果不指定容量,一般認為這個容量是無限的。
如果不指定容量,預設容量是11.如果將元素取出,那麼會對元素進行自然排序 --- 要求儲存的物件所對應的類必須實現comparable,重寫compareto方法,講比較規則寫到方法中;如果進行迭代遍歷,那麼不保證排序。
只允許儲存1個元素。
預設初始容量是16,預設載入因子是0.75f,預設擴容每次增加一倍。本身是乙個非同步式執行緒不安全的對映
對外提供的方法都是同步方法
在jdk1.8之前,採用分段(分桶)鎖, 分段鎖採用的是讀寫鎖機制(讀鎖:允許多個執行緒讀,但是不允許執行緒寫;寫鎖:允許乙個執行緒寫,但是不允許執行緒讀);jdk1.8不再採用鎖機制,而是cas(compare and swap)演算法, 減小了鎖的開銷;如果乙個桶中的元素個數超過了8個,那麼會將這個桶的鍊錶扭轉成一棵紅黑樹(自平衡二叉查詢樹)結構。
本身是乙個介面,所以更多的是使用實現類
跳躍表:為了提高查詢效率所產生的一種資料結構
跳躍表是典型的以空間換時間的產物。
跳躍表的時間複雜度是o(logn)
如果跳躍表中插入新的元素,新的元素是否往上提取,遵循「拋硬幣」原則 --- 1/2原則
只要保證這個節點有一半的概率被提取就可以
跳躍表適合大量查詢而不增刪的場景
countdownlatch - 閉鎖 - 執行緒減鎖
對執行緒neg進行計數,當計數歸零的時候會開放阻塞執行緒繼續往下執行
system.out.println("學生交卷離開考場");
// 計數-1
cdl.countdown();}}
class teacher implements runnable
@override
public void run() catch (interruptedexception e)
system.out.println("老師收卷離開了考場~~~");
cdl.countdown();}}
遵循先進先出(fifo)的原則。阻塞式佇列本身使用的時候是需要指定界限的。
在生產者消費者模型中,生產資料和消費資料的速率不一致,如果生產資料速度快一些,消費(處理)不過來,就會導致資料丟失。這時候我們就可以應用上阻塞佇列來解決這個問題。
底層是基於陣列來進行儲存,使用的時候需要指定乙個容量,容量指定之後不可改變。--- 生產 - 消費模型
public static void main(string args) throws interruptedexception
底層是基於鍊錶(節點)來進行資料的儲存。在使用的時候可以指定初始容量,也可以不指定。
如果指定了容量,就以指定的容量為準來進行儲存;
如果不指定容量,那麼預設容量是 integer.max_value -> 231 - 1。如果不指定容量,一般認為這個容量是無限的。
如果不指定容量,預設容量是11.如果將元素取出,那麼會對元素進行自然排序 --- 要求儲存的物件所對應的類必須實現comparable,重寫compareto方法,講比較規則寫到方法中;如果進行迭代遍歷,那麼不保證排序。
只允許儲存1個元素。
預設初始容量是16,預設載入因子是0.75f,預設擴容每次增加一倍。本身是乙個非同步式執行緒不安全的對映
對外提供的方法都是同步方法
在jdk1.8之前,採用分段(分桶)鎖, 分段鎖採用的是讀寫鎖機制(讀鎖:允許多個執行緒讀,但是不允許執行緒寫;寫鎖:允許乙個執行緒寫,但是不允許執行緒讀);jdk1.8不再採用鎖機制,而是cas(compare and swap)演算法, 減小了鎖的開銷;如果乙個桶中的元素個數超過了8個,那麼會將這個桶的鍊錶扭轉成一棵紅黑樹(自平衡二叉查詢樹)結構。
本身是乙個介面,所以更多的是使用實現類
跳躍表:為了提高查詢效率所產生的一種資料結構
跳躍表是典型的以空間換時間的產物。
跳躍表的時間複雜度是o(logn)
如果跳躍表中插入新的元素,新的元素是否往上提取,遵循「拋硬幣」原則 --- 1/2原則
只要保證這個節點有一半的概率被提取就可以
跳躍表適合大量查詢而不增刪的場景
countdownlatch - 閉鎖 - 執行緒減鎖
對執行緒neg進行計數,當計數歸零的時候會開放阻塞執行緒繼續往下執行
system.out.println("學生交卷離開考場");
// 計數-1
cdl.countdown();}}
class teacher implements runnable
@override
public void run() catch (interruptedexception e)
system.out.println("老師收卷離開了考場~~~");
cdl.countdown();}}
concurrent包簡介 Condition 類
condition的基本使用如下 condition是個介面,基本的方法就是await 和signal 方法 condition依賴於lock介面,生成乙個condition的基本 是lock.newcondition 呼叫condition的await 和signal 方法,都必須在lock保護之...
showModalDialog引數詳解 使用方法
基本介紹 showmodaldialog ie 4 支援 showmodelessdialog ie 5 支援 window.showmodaldialog 方法用來建立乙個顯示html內容的模態對話方塊。window.showmodelessdialog 方法用來建立乙個顯示html內容的非模態對...
python包使用 Python模組和包使用
1 什麼是模組 模組就是乙個.py的檔案 2 為什麼要使用模組?最開始的程式 沒有任何組織 函式 類 模組 包 為了讓程式的組織結構更加靈活清晰,降低耦合性 方便管理 3 如何使用模組 1 import 只能匯入在當前目錄 和內建的模組,使用模組裡的內容需要 模組.來呼叫 2 from.import...