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