為什麼使用ConcurrentHashMap

2022-09-09 02:21:06 字數 1442 閱讀 4731

concurrenthashmap是有segment陣列結構和hashentry陣列結構組成。

segment是一種可重入鎖(reentrantlock),在concurrenthashmap裡扮演鎖的角色;

hashentry則用於儲存鍵值對資料。乙個concurrenthashmap裡包含乙個segment陣列。

segment的結構和hashmap類似,是一種陣列和鍊錶結構。乙個segment包含乙個hashentry陣列,

每個hashentry是乙個鍊錶結構的元素,每乙個segment守護著乙個hashentry陣列裡的元素,當對

hashentry陣列的資料進行修改時,必須首先獲得與它對應的segment鎖。

1/**

2* 3* @description

4* 1.執行緒不安全的hashmap

5* hashmap在併發執行put操作時會引起死迴圈,是因為多執行緒會導致hashmap的

6* entry鍊錶形成環形資料結構,一旦形成環形資料結構,entry的next節點永遠不為空,

7* 就會產生死迴圈獲取entry。

8* 2.效率低下的hashtable910

* hashtable的效率非常低下。因為當乙個執行緒訪問hashtable的同步方法,其他執行緒也訪問hashtable

11* 的同步方法時,會進入阻塞或輪詢狀態。如執行緒1使用put進行元素新增,執行緒2不但不能使用put方法新增元素,

12* 也不能使用get方法來獲取元素,所以競爭越激烈效率越低。

13* 3.concurrenthashmap的分段技術可有效提公升併發訪問率

14* hashtable容器在競爭激烈的併發環境下表現出效率低下的原因是所有訪問hashtable的執行緒

15* 都必須競爭同一把鎖,假如容器裡有多把鎖,每一把鎖用於鎖容器其中一部分資料,那麼當多執行緒

16* 訪問容器不同資料段的資料時,執行緒間就不會存在鎖競爭,從而可以有效提高併發訪問效率,這就是

17* concurrenthashmap所使用的鎖分段技術。首先將資料分成一段一段地儲存,然後給每一段資料配一把鎖,

18* 當乙個執行緒占用鎖訪問其中乙個段資料的時候,其他段資料也能被其他執行緒訪問。

19* @throws exception

20*/

21@test

22public

void

testhashmap() throws exception

36 }, "

ftf"+i).start();37}

3839

}40 }, "

ftf"

);41

42t.start();

43t.join();

44 }

it技術和行業*** 417691667

為什麼使用 DOCTYPE html

a doctype is a mostly useless,but required,header.html5 spec 現在的各種web開發工具都足夠強大,支援插入模板 因此你並不需要把這又長又臭的doctype乙個個字母的敲出來。doctype最大的作用是讓瀏覽器用來選擇渲染模式,或者說是用來觸...

為什麼使用指標

在實際程式設計中,既然使用變數就可以訪問資料,為什麼還用指標呢?使用指標來操縱自動變數的唯一原因是,為了說明指標的工作原理。指標真正的用途是被用於完成下列3種任務 管理自由儲存區中的資料 訪問類的成員資料和函式 按引用傳遞引數 在 函式的 工作原理 中,提到了5個記憶體區域 全域性命名空間 自由儲存...

為什麼使用Servlet amp JSP

web伺服器接收客戶請求,查詢資源,然後向客戶返回一些結果。web客戶允許使用者請求伺服器上的某個資源,並且向使用者顯示請求的結果。客戶和伺服器使用http協議進行通訊,伺服器使用http向客戶傳送html。tcp協議負責確保從乙個網路節點向另乙個網路節點傳送的檔案能作為乙個完整的檔案到達目的地,i...