用java哈希表实现互斥

用java哈希表实现互斥,java,multithreading,Java,Multithreading,嗨,伙计,我班上有一个全局哈希表,两个线程a和B与她一起工作。 A从哈希表中读取,B在哈希表中写入。。是否存在相互排斥的问题?我需要同步它,否则哈希表类是安全的?哈希表是映射接口的线程安全实现 在正常的投递操作中,您将是安全的。但是,当您在一个线程中对其进行迭代并从另一个线程修改其内容时,您将遇到ConcurrentModificationException问题。因此,在迭代时,请确保在原始哈希表的副本上进行迭代。哈希表是映射接口的线程安全实现 在正常的投递操作中,您将是安全的。但是,当您在一个

嗨,伙计,我班上有一个全局哈希表,两个线程a和B与她一起工作。 A从哈希表中读取,B在哈希表中写入。。是否存在相互排斥的问题?我需要同步它,否则哈希表类是安全的?

哈希表是映射接口的线程安全实现

在正常的投递操作中,您将是安全的。但是,当您在一个线程中对其进行迭代并从另一个线程修改其内容时,您将遇到ConcurrentModificationException问题。因此,在迭代时,请确保在原始哈希表的副本上进行迭代。

哈希表是映射接口的线程安全实现


在正常的投递操作中,您将是安全的。但是,当您在一个线程中对其进行迭代并从另一个线程修改其内容时,您将遇到ConcurrentModificationException问题。因此,在迭代时,请确保在原始哈希表的副本上进行迭代。

使用java集合提供的同步哈希映射非常有用。此类是一个简单的包装器,封装hashmap:

Collections.synchronizedMap(new HashMap());
java文档中有进一步的示例:
synchronizedMap

使用java集合提供的同步HashMap很有用。此类是一个简单的包装器,封装hashmap:

Collections.synchronizedMap(new HashMap());
java文档中有进一步的示例: synchronizedMap

您应该改用它,它是java.util.Map接口的更好/更快的实现

您应该改为使用,这是java.util.Map接口更好/更快的实现

哈希表确保在其上执行的任何操作都是原子的。但是如果您正在执行多个操作,则应该同步它们。在下面的示例中,即使contains和put是原子的,但代码有一个check和act raise条件,因此您需要为此进行额外的同步

    if(!hashtable.contains(Object))
    {
        hashtable.put(key, value);
    }
还要检查Collections.synchronizedMap或ConcurrentHashMap,而不是HashTable,以确保在其上执行的任何操作都是原子操作。但是如果您正在执行多个操作,则应该同步它们。在下面的示例中,即使contains和put是原子的,但代码有一个check和act raise条件,因此您需要为此进行额外的同步

    if(!hashtable.contains(Object))
    {
        hashtable.put(key, value);
    }

还要检查Collections.synchronizedMap或ConcurrentHashMap,而不是HashTable

每个人都说了可以说的话,但这只是对互斥的补充。你在问是否不会有这样的问题。线程安全程序必须确保,如果threadA正在使用代码块block1,那么在线程完成之前,没有其他线程会访问它。因此,如果我很好地理解互斥的含义,那么访问同一同步线程安全共享资源的线程是互斥的,因为它们不能同时访问它。 如果您选择其中一个提议的安全映射实现,Java实际上为您做了很多艰苦的工作。现在,如果您的哈希表或您喜欢的任何其他线程安全的mao是一个共享资源,那么您唯一需要注意的就是before关系。如果一个线程正在读取数据,而另一个线程正在写入数据,这一点很重要。
更多信息可以在和上找到

每个人都说了可以说的话,但这只是对你们所谓的互斥的补充。你在问是否不会有这样的问题。线程安全程序必须确保,如果threadA正在使用代码块block1,那么在线程完成之前,没有其他线程会访问它。因此,如果我很好地理解互斥的含义,那么访问同一同步线程安全共享资源的线程是互斥的,因为它们不能同时访问它。 如果您选择其中一个提议的安全映射实现,Java实际上为您做了很多艰苦的工作。现在,如果您的哈希表或您喜欢的任何其他线程安全的mao是一个共享资源,那么您唯一需要注意的就是before关系。如果一个线程正在读取数据,而另一个线程正在写入数据,这一点很重要。
更多信息请访问和

,这样我就没有互斥问题了?这样我就没有互斥问题了?使用ConcurrentHashMap,我就没有互斥问题了?互斥是什么意思?你能在你的问题中详细说明这个术语吗?a位线程a从哈希表e中读取,B位线程B在哈希表中写入,我需要的是不存在所谓的问题。是的,ConcurrentHashMap是线程安全的。使用ConcurrentHashMap,我没有互斥的问题?互斥是什么意思?你能在你的问题中详细说明这个术语吗?a位线程a从哈希表e中读取,B位线程B在哈希表中写入,我需要的是不存在所谓的问题。是的,ConcurrentHashMap是线程安全的。在此上下文中什么是互斥?在此上下文中什么是互斥?