LinkedHashMap 會將put進去的key value 按照次序進行遍歷。
ConcurrentHashMap 1.允許並發的讀操作。
2. 性能好。根據默認的並發級別(concurrency level),Map被分割成16個部分,並且由不同的鎖控制。這意味着,同時最多可以有16個寫線程操作Map。由只能一個線程進入變成同時可由16個寫線程同時進入(讀線程幾乎不受限制),性能的提升是顯而易見的。但由於一些更新操作,如put(),remove(),putAll(),clear()只鎖住操作的部分,所以在檢索操作不能保證返回的是最新的結果。
3. 線程安全性弱。CHM在put操作時並沒有對整個Map加鎖,所以一個線程正在put(k,v)的時候,另一個線程調用get(k)會得到null,這就會造成一個線程put的值會被另一個線程put的值所覆蓋。CHM提供的putIfAbsent(key,value)方法原子性,同時避免了線程競爭的風險。CHM適用於讀者數量超過寫者時,當寫者數量大於等於讀者時,CHM的性能是低於Hashtable和synchronized Map的。這是因為當鎖住了整個Map時,讀操作要等待對同一部分執行寫操作的線程結束。
4. 優勢。CHM適用於做cache,在程序啟動時初始化,之后可以被多個請求線程訪問。