gpt4 book ai didi

java - 锁定条件和特定值

转载 作者:行者123 更新时间:2023-12-03 12:59:04 25 4
gpt4 key购买 nike

我已经开始阅读Java concurrency in practice,但是在继续之前,我有一个需要解决的想法。

以下面的代码为例。
我已经使用了 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(...)方法,那么我什么都不会进行同步,因为仅对于首次写入和唯一写入才需要同步。

您将如何继续优化这段代码(如果可能的话)?

最佳答案

如果您想了解有关锁定的信息,那么您将走上正确的道路。

如果您想在关键的应用程序中实际使用此方法,则最好使用此模式的标准实现,例如Guava的LoadingCache,它重用了ConcurrentHashMap的双重锁定逻辑,但也允许以线程安全的方式计算值。

参见https://github.com/google/guava/wiki/CachesExplained

即使您不需要逐出逻辑,对于线程安全的惰性计算缓存而言,这仍然是一个不错的解决方案。

关于java - 锁定条件和特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673537/

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