Tra*_*ity 7 concurrency multithreading dictionary
我想基于API文档澄清一些关于ConcurrentHashMap和ConcurrentSkipListMap的内容.
从我的理解ConcurrentHashMap gaurantees线程安全插入多个线程.因此,如果您的地图只能由多个线程同时填充,那么就没有问题.然而,API继续建议它不会锁定检索,所以你可能会在这里得到误导性的结果?
相反,对于ConcurrentSkipListMap,它表示:"插入,删除,更新和访问操作安全地由多个线程并行执行".所以我假设这没有哈希映射所具有的上述检索问题,但显然这通常会带来性能成本?
在实践中,有没有人发现需要使用ConcurrentSkipListMap,因为这种特殊的行为,或者通常无关紧要的是检索可能会给出过时的视图?
dez*_*hik 10
检索反映了最近完成的更新操作的结果。对于诸如 putAll 和 clear 之类的聚合操作,并发检索可能仅反映某些条目的插入或删除。
它对get(key). 如果当线程1调用put(key1, value1)和线程2调用之后get(key1),线程2不会等待线程1,以完成其put彼此,他们不同步及线程可以变老相关的值。但是,如果put(key1, value1)在 Thread2 尝试之前在 Thread1 中完成,get(key1)则 Thread2 保证获得此更新 ( value1)。
ConcurrentSkipListMap已排序并提供
containsKey、get、put 和 remove 操作及其变体的预期平均 log(n) 时间成本
ConcurrentSkipListMap 不是那么快,但是当您需要排序的线程安全映射时很有用。