从Java HashMap获取同步Map
要从Java中的HashMap获取同步Map,我们可以使用Collection接口名为“synchronizedMap()”的内置方法。这里,HashMap是一个用于实现Map接口的类。它以键值对的形式存储其元素。键是一个用于获取和接收与其关联值的物件。它可以访问Map接口的所有方法,但本身没有任何附加方法。不允许重复值,尽管我们可以存储空值和键。在本文中,我们将探讨同步的必要性及其通过示例程序的实际实现。
来自HashMap的同步Map
同步Map是可以被多个线程安全访问而不会导致并发问题的Map。另一方面,HashMap是非同步的,这意味着当我们在多线程环境中实现它时,多个线程可以同时访问和修改它而没有任何协调。这可能导致数据不一致和元素的意外行为。它也可能影响操作的结果。
因此,我们需要使用“synchronizedMap()”同步对HashMap元素的访问。此方法在原始HashMap周围创建一个包装器,并在任何线程尝试访问或修改它时将其锁定。
synchronizedMap()是Collections类的静态方法,它接受HashMap集合的实例作为参数,并从中返回一个同步的Map。但是,需要注意的是,只有map本身是同步的,其视图(例如keyset和entrySet)不是同步的。因此,如果我们想要遍历同步map,我们需要使用同步块或锁来确保独占访问。
语法
Collections.synchronizedMap(instanceOfHashMap);
这里,“Collections”是Collection接口的一个类。
同步块的一般语法如下:
语法
synchronized(instanceOfSynchronizedMap) { // operation }
要使用HashMap集合,我们需要使用以下语法创建它的实例
语法
HashMap<TypeOfKey, TypeOfValue> nameOfMap = new HashMap<>();
方法
首先,导入“java.util”包以启用HashMap类的使用。
首先,导入“java.util”包以启用HashMap类的使用。然后,创建一个HashMap,其中键的类型为String,值的类型为Integer。
使用内置方法“put()”将一些元素存储到集合中。
现在,同步这些元素并将它们存储在Map类型的变量中。
最后,打印新的同步map并退出。
示例1
以下示例说明了如何使用synchronizedMap()同步指定的HashMap。
import java.util.*; public class Maps { public static void main(String[] args) { HashMap<String, Integer> cart = new HashMap<>(); // 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); // printing synchronized map from HashMap Map mapSynched = Collections.synchronizedMap(cart); System.out.println("Synchronized Map from HashMap: " + mapSynched); } }
输出
Synchronized Map from HashMap: {Peanut=2, Butter=5, Milk=10, Rice=20, Bread=2}
方法
创建一个HashMap,其中键的类型为String,值的类型为Integer。
使用内置方法“put()”将一些元素存储到集合中。
现在,使用synchronizedMap()方法同步这些元素,并将它们存储到一个新的Map集合中。
最后,定义一个同步块。在这个块中,使用for-each循环通过“keySet()”方法打印项目。
示例2
在以下示例中,我们将使用synchronizedMap()方法和同步块来同步给定的HashMap
import java.util.*; public class Maps { public static void main(String[] args) { HashMap<String, Integer> cart = new HashMap<>(); // 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 a new synchronized Map from HashMap Map<String, Integer> mapSynched = Collections.synchronizedMap(cart); System.out.println("New Synchronized Map from HashMap: "); // printing synchronized map from HashMap synchronized (mapSynched) { for (String unKey : mapSynched.keySet()) { System.out.println("Item: " + unKey + ", Quantity: " + cart.get(unKey)); } } } }
输出
New Synchronized Map from HashMap: Item: Peanut, Quantity: 2 Item: Butter, Quantity: 5 Item: Milk, Quantity: 10 Item: Rice, Quantity: 20 Item: Bread, Quantity: 2
结论
同步是建立协调并确保两个或多个活动之间正确通信的过程。由于HashMap是非同步的,这可能会导致数据不一致,因此我们需要对其进行同步。内置方法“Collections.synchronizedMap()”是执行此任务的一种更便捷的方法。