ConcurrentHashMap的Java说,
即使所有操作都是线程安全的。
当我们说ConcurrentHashMap的所有操作都是线程安全的时候,意味着什么?
编辑:,我想问的是,假设有put()操作。然后,根据上面的声明,CHM中的put()是线程安全的。这是什么意思?
发布于 2014-02-03 11:08:48
维基百科:
一段代码是线程安全的,如果它只以保证同时由多个线程安全执行的方式操作共享数据结构。
要回答扩展的问题,如果多个线程要执行put(),那么最后一个要运行的线程将设置映射中该键的值。所有的投手都会按一定的顺序进行,但不会互相干扰。在没有并发保证的情况下,他们怎么可能干涉呢?如果以前没有与映射或前一个值相关联的值,put()返回null。如果两个put发生在一个非并发映射上,那么它们都可以从put中获得相同的返回值。
如果没有并发性,这个序列是可能的:
Thread1: map.put("key1", "value1") => null然后
Thread2: map.put("key2", "value2") => "value1"
Thread3: map.put("key3", "value3") => "value1"如果Thread3只是在Thread2之后进入,它可能会看到"value1“而不是"value2",尽管这不是它所取代的。这种情况不会发生在并行地图上。
发布于 2014-02-03 11:12:44
线程安全意味着您可以在多个线程之间共享一个ConcurrentHashMap对象,并且可以在没有外部锁定的情况下并发地访问/修改该对象。
发布于 2014-02-03 11:47:59
线程安全意味着一个对象可以同时被多个线程使用,同时仍能正确地操作。在ConcurrentHashMap的具体情况下,这些特性得到了保证:
ConcurrentModificationException,它们将按照创建时固定的顺序迭代。它们可能反映或不反映在访问地图时所做的任何修改。普通的HashMap迭代器在线程迭代时会抛出异常。HashMap可能会进入不一致的内部状态。https://stackoverflow.com/questions/21525697
复制相似问题