java - 锁定条件和特定值

标签 java multithreading

我已经开始阅读实践中的 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/

相关文章:

wpf - 将任务传递给任务属性

java - 基于HADOOP_HOME自动加载HDFS Configuration?

java - Eclipse 上禁止和不鼓励引用的访问规则

java - 我可以使用枚举元素而不是字符串将 JSoup Elements 类重载为 getElementsByTag 吗?

c - 没有锁的一插入多读列表安全吗?

Java 线程 : explain why not always print the newest value of variable

java - Java中Reflected方法的异常堆栈跟踪

java - 如何在 UML 类图中表示回调

java - 范围求和多线程

python - 唤醒休眠线程的最佳方式?