我有一个 HashMap
为:
Map<Integer ,ArrayList<Double>> map1 = new HasMap<Integer,ArrayList<Double>>()
该映射由一定数量的线程访问和修改。我想对 ArrayList 每个组件的粒度级别进行线程安全更新。这意味着,一个值可以被多个线程修改,但一个组件不能被多个线程修改。我该怎么做?这是否可以防止迭代时出现“未定义的属性”? iterating values
[编辑]
key value
1000 [0.1,0.002,0.8,0.112]
值的每个组成部分都会更新。更新时,第一个组件可以由一个线程更新,第二个组件可以由另一个线程一次更新。我不想只为一个线程锁定一对。
最佳答案
我认为你想要的是使用 Lock 。当您调用 lock()
时,它将允许您“锁定”资源以防止其他线程使用,然后在该资源上的更新完成时调用 unlock()
以便其他线程可以修改它。您可以为每个资源创建一个锁。
关于java - hashmap的线程安全更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590430/