我在查看是否需要同步某些内容时遇到了一些麻烦,我将向您展示我的示例解决方案。 我真的需要同步我的方法吗?或者会有更好的方法吗? 因为 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/