java - ConcurrentHashmap 在我的实现中是否需要同步?

标签 java concurrency thread-safety

我在查看是否需要同步某些内容时遇到了一些麻烦,我将向您展示我的示例解决方案。 我真的需要同步我的方法吗?或者会有更好的方法吗? 因为 ConcurrentHashMap 本身是线程安全的,所以出现了问题,因为我有两个映射,那么我认为我应该同步这些方法,以免两个映射不同步,对吗?

BookService 使用 @Service 进行注释,这意味着它是一个单例。

@Service
public class BookService {

    private final ConcurrentMap<String, UUID> codeToUUIDs;
    private final ConcurrentMap<Book, String> bookToCodes;

    public BookService() {
        this.bookToCodes = fillBookCodes();
        this.codeToUUIDs = new ConcurrentHashMap<>();
    }

    public synchronized UUID add(Book book) {
        final String randomCode = bookToCodes.putIfAbsent(book, "randomCode");
        return codeToUUIDs.get(randomCode);
    }

    public synchronized UUID get(String code) {
        return codeToUUIDs.get(code);
    }
}

最佳答案

由于两个 map 都需要同步,因此您需要使用同步方法。

但是由于您的方法已经同步,因此这里不需要 ConcurrentMap。普通的 HashMap 就可以了。

关于java - ConcurrentHashmap 在我的实现中是否需要同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49907102/

相关文章:

java - 根据 JTable 单元格更改更新数据库

java - 如果您将一个可运行对象提交给具有多个线程的执行程序服务,多个线程是否会执行该可运行对象?

concurrency - 如何处理对 redis 键的并发更新?

c# - 只读静态字段初始化的线程安全

java - 非线程安全类

c++ - GetDC/ReleaseDC 的 IDXGISurface1 线程安全/同步规则?

java - 如何在 google kubernetes 中访问 postgresql pod/服务

Java:我的新对象实例化正在更改以前的对象引用

java - nGrinder WAR 抛出异常

ruby - ruby MRI 中的赋值是原子操作吗?