Java 从HashMap获取同步Map

Java 从HashMap获取同步Map

要从Java中的HashMap获取同步Map,我们可以使用Collection接口的内置方法’synchronized Map()’。在这里,HashMap是用来实现Map接口的类。它以键-值对的形式存储元素。键是用于获取和接收与其关联的值的对象。它可以访问Map接口的所有方法,但没有自己的附加方法。不允许重复值,尽管我们可以存储空值和键。在本文中,我们将通过示例程序探讨同步的需要及其实际实现。

从HashMap获取同步Map

同步的Map是一个可以被多个线程安全访问的Map,而无需引起并发问题。另一方面,HashMap是非同步的,这意味着当我们在多线程环境中实现它时,多个线程可以同时访问和修改它而不需要协调。这可能会导致数据不一致和元素的意外行为。它还可能影响操作的结果。

因此,我们需要使用’synchronizedMap()’来同步对HashMap元素的访问。该方法创建一个围绕原始HashMap的包装器,并在任何线程尝试访问或修改它时对其进行锁定。

‘synchronizedMap()’是Collections类的静态方法,它以HashMap集合的实例作为参数,并从中返回一个同步的Map。但是,重要的是注意,只有Map本身是同步的,它的视图(如键集和条目集)不是。因此,如果我们想要迭代同步的Map,我们需要使用同步块或锁来确保独占访问。

语法

Collections.synchronizedMap(instanceOfHashMap);

在这里,’Collections’是集合接口的类。

同步块的一般语法如下-

语法

synchronized(instanceOfSynchronizedMap) {
   // operation
}

要使用HashMap集合,我们需要使用以下语法创建其实例

语法

HashMap<TypeOfKey, TypeOfValue> nameOfMap = new HashMap<>();

方法

  • 首先,导入’java.util’包以启用HashMap类的使用。

  • 其次,创建一个键为String类型,值为Integer类型的HashMap。

  • 使用内置方法’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的新集合中。

  • 最后,定义一个同步块。在这个块中,使用‘keySet()’方法运行一个for-each循环来打印元素。

示例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()’是执行这个任务更方便的方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程