我已经开始阅读实践中的 Java 并发
,但在继续阅读之前,我有一个需要解决的想法。
以这段代码为例。
我使用 Guava ( Striped ) 来检索 Lock
(s)。
顺便说一句,我知道,正如 Guava 文档所述,这类似于使用 ConcurrentHashMap。
public Object getValue(final String input) {
final Lock inputLock = STRIPED.get(input);
try {
inputLock.lock();
Object value = VALUES.get(input);
if (value == null) {
value = buildValue(input);
VALUES.put(input, value);
}
return value;
} finally {
inputLock.unlock();
}
}
现在,这是通过根据输入值锁定来实现的。
但是,如果使用相同的值多次调用 getValue(...)
方法,则我不会进行任何同步,因为仅第一次且唯一一次写入才需要同步。
您将如何优化这段代码(如果可能)?
最佳答案
您尝试实现的功能可以使用 Java 8 中的 ConcurrentHashMap 来完成。
public Object getValue(final String input) {
return chm.computeIfAbsent(input, ip -> buildValue(ip));
}
关于java - 锁定条件和特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673537/