java线程安全的修改元素

slsn1g29  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(298)

我有下面的代码,另外看起来线程安全。modifyelement怎么样,或者我怎样才能使这个线程安全呢?

ConcurrentNavigableMap<String, List<String>> entries = new ConcurrentSkipListMap<>();

 public void record(String key, String value) {
    entries.computeIfAbsent(key, k -> Collections.synchronizedList(new ArrayList<String>())).add(value);
}

    public void modifyelement(String key, String oldval, String newval) {
        entries.computeIfPresent(key, (k , v ) -> {
                v.set(v.indexOf(oldval), newval);
                return v;
            });

    }
sc4hvdpw

sc4hvdpw1#

java利用monitor概念在需要时确保线程安全。简单地说,关键变量被视为一个封闭空间,称为监视器。当线程调用包含关键变量的对象时,他可以控制监视器。如果另一个线程现在想进入监视器,他必须等到第一个线程离开关键空间。
可以使用 synchronized 关键字。例子: public synchronized void doSomething() {} 这确保只有一个线程可以使用该方法。请注意,有其他方法可以确保线程安全,例如手动放置锁。
现在来看一个具体的例子,modifyelement应该是同步的,因为如果多个线程同时调用它,可能会有副作用。
我希望这有帮助。:)
当做。

相关问题