concurrenthashmap和hashtable區別
阿新 • • 發佈:2019-02-19
hashtable(同一把鎖):使用synchronized來保證執行緒安全,但效率非常低下。當一個執行緒訪問同步方法時,其他執行緒也訪問同步方法,可能會進入阻塞或輪詢狀態,如使用put新增元素,另一個執行緒不能使用put新增元素,也不能使用get,競爭會越來越激烈效率越低。
concurrenthashmap(分段鎖):(鎖分段技術)每一把鎖只鎖容器其中一部分資料,多執行緒訪問容器裡不同資料段的資料,就不會存在鎖競爭,提高併發訪問率。
首先將資料分為一段一段的儲存,然後給每一段資料配一把鎖,當一個執行緒佔用鎖訪問其中一個段資料時,其他段的資料也能被其他執行緒訪問。concurrenthashmap是由Segment陣列結構和HahEntry陣列結構組成。Segment是一種可重入鎖ReentrantLock,扮演鎖的角色。HashEntry用於儲存鍵值對資料。一個concurrenthashmap裡包含一個Segment陣列。Segment的結構和Hashmap類似,是一種陣列和連結串列結構,一個Segment包含一個HashEntry陣列,每個HashEntry是一個連結串列結構的元素,每個Segment守護著一個HashEntry數組裡的元素,當對HashEntry陣列的資料進行修改時,必須首先獲得對應的Segment。
應用場景:
concurrenthashmap(分段鎖):(鎖分段技術)每一把鎖只鎖容器其中一部分資料,多執行緒訪問容器裡不同資料段的資料,就不會存在鎖競爭,提高併發訪問率。
首先將資料分為一段一段的儲存,然後給每一段資料配一把鎖,當一個執行緒佔用鎖訪問其中一個段資料時,其他段的資料也能被其他執行緒訪問。concurrenthashmap是由Segment陣列結構和HahEntry陣列結構組成。Segment是一種可重入鎖ReentrantLock,扮演鎖的角色。HashEntry用於儲存鍵值對資料。一個concurrenthashmap裡包含一個Segment陣列。Segment的結構和Hashmap類似,是一種陣列和連結串列結構,一個Segment包含一個HashEntry陣列,每個HashEntry是一個連結串列結構的元素,每個Segment守護著一個HashEntry數組裡的元素,當對HashEntry陣列的資料進行修改時,必須首先獲得對應的Segment。
應用場景: