從 Java TreeMap 獲取同步 Map
要從 Java 中的 TreeMap 獲取同步 Map,我們可以使用 Collection 介面的內建方法“synchronizedMap()”。在這裡,TreeMap 是一個用於實現 NavigableMap 介面的類。它以樹形結構儲存對映的元素。它提供了一種有效的替代方案,以排序方式儲存鍵值對。預設情況下,TreeMap 不是同步的。在本文中,我們將解釋同步的必要性及其透過示例程式的實際實現。
來自 Tree Map 的同步 Map
TreeMap 不是執行緒安全的,這意味著當我們在多執行緒環境中實現它時,多個執行緒可以同時訪問和修改它,而無需任何協調。這可能導致資料不一致和元素的意外行為。它也可能影響操作的結果。
因此,我們需要使用“synchronizedMap()”同步對 TreeMap 元素的訪問。此方法在原始 TreeMap 周圍建立一個包裝器,並在任何執行緒嘗試訪問或修改它時鎖定它。
synchronizedMap() 是 Collections 類的靜態方法,它將 TreeMap 集合的例項作為引數,並從中返回一個同步的 Map。
語法
Collections.synchronizedMap(instanceOfTreeMap);
這裡,“Collections”是 Collection 介面的一個類。
TreeMap 的一般語法如下:
語法
TreeMap<TypeOfKey, TypeOfValue> nameOfMap = new TreeMap<>();
方法
首先,匯入“java.util”包以啟用 TreeMap 類的使用。
然後,建立一個 TreeMap,其中鍵的型別為 String,值的型別為 Integer。
使用內建方法“put()”在集合中儲存一些元素
現在,同步這些元素並將它們儲存在 Map 型別的變數中。
最後,列印新的同步對映並退出。
示例 1
以下示例說明了如何使用 synchronizedMap() 同步指定的 TreeMap。
import java.util.*; public class Maps { public static void main(String[] args) { TreeMap<String, Integer> cart = new TreeMap<>(); // Adding elements in the cart map cart.put("Butter", 5); cart.put("Milk", 10); cart.put("Rice", 20); cart.put("Bread", 2); cart.put("Peanut", 2); // print synchronized map from TreeMap Map mapSynched = Collections.synchronizedMap(cart); System.out.println("Synchronized Map from TreeMap: " + mapSynched); } }
輸出
Synchronized Map from TreeMap: {Bread=2, Butter=5, Milk=10, Peanut=2, Rice=20}
方法
首先,匯入“java.util”包以啟用 TreeMap 類的使用。
然後,建立一個 TreeMap,其中鍵的型別為 String,值的型別為 Integer
使用內建方法“put()”在集合中儲存一些元素
現在,使用 synchronizedMap() 方法同步這些元素並將它們儲存在 Map 的新集合中。
最後,定義一個同步塊。在此塊內,使用“keySet()”方法獲取一個 for-each 迴圈以列印項。
示例 2
在以下示例中,我們將使用 synchronizedMap() 方法和同步塊來同步給定的 TreeMap
import java.util.*; public class Maps { public static void main(String[] args) { TreeMap<String, Integer> cart = new TreeMap<>(); // Adding elements in the cart map cart.put("Butter", 5); cart.put("Milk", 10); cart.put("Rice", 20); cart.put("Bread", 2); cart.put("Peanut", 2); // creating new synchronized Map Map<String, Integer> mapSynched = Collections.synchronizedMap(cart); System.out.println("Synchronized Map from TreeMap: " ); // printing synchronized map from TreeMap synchronized (mapSynched) { for (String unKey : mapSynched.keySet()) { System.out.println("Item: " + unKey + ", Quantity: " + cart.get(unKey)); } } } }
輸出
Synchronized Map from TreeMap: Item: Bread, Quantity: 2 Item: Butter, Quantity: 5 Item: Milk, Quantity: 10 Item: Peanut, Quantity: 2 Item: Rice, Quantity: 20
結論
同步是建立協調並確保兩個或多個活動之間正確通訊的過程。由於 TreeMap 不是同步的,這可能會導致資料不一致,因此我們需要對其進行同步。內建方法“Collections.synchronizedMap()”是執行此任務的更便捷的方法。