gpt4 book ai didi

java - 从多个线程但一次从一个线程更改/读取 HashMap

转载 作者:行者123 更新时间:2023-11-29 05:08:46 25 4
gpt4 key购买 nike

我想在多线程环境中使用 LinkedHashMap,其中多个线程可以访问 HashMap (读/写),但一次只有一个线程这样做。因此不需要同步。但是,我需要确保一个线程所做的更改可以被稍后访问它的任何其他线程读取。例如:



LinkedHashMap map = new LinkedHashMap();
// Thread 1
map.put(key1, val1);

// Thread 2. It starts after thread 1 has finished.
Object val = map.get(key1);
assert(val == val1);

..编辑

有些人希望明确说明问题。所以这里是:

“我想确保对 LinkedHashMap 所做的更改对其他线程可见,即将更改写入主内存,其他线程仅从主内存读取映射。没有并发访问映射。 "

最佳答案

答案取决于您如何准确地执行“一次只有一个线程访问 map ”。 (对时间的天真理解在这里不适用。同步是赋予程序中时间意义的东西)。如果您在其他任何地方搭载外部同步,那么它可能会起作用,尽管是以一种脆弱的方式。

"I want to ensure that the changes done to a LinkedHashMap are visible to other threads i.e the changes are written to the main memory, and other threads read the map from main memory only."

那么您必须使用同步。没有别的可以让你得到你所要求的语义。使用 synchronized 保护同一对象上的所有访问是一种常规方法,但这会惩罚读取。如果读取次数大大超过写入次数,使用 ReadWriteLock 来保护 LinkedHashMap 访问可能会更高效。

关于java - 从多个线程但一次从一个线程更改/读取 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29469847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com