gpt4 book ai didi

java - 如何高效地锁定代码块以避免乐观锁异常

转载 作者:行者123 更新时间:2023-11-30 04:30:48 25 4
gpt4 key购买 nike

我对 Java 中的多线程处理不太有经验。我想要的是为代码块设置锁。就我而言,我想避免乐观锁异常,同时为特定用户进行一些同步。方法replicateUser 可以由同一用户的多个线程调用。但不能保证 authenticatedUser 始终是同一个相同的对象。

那么如何有效地锁定该部分呢?我不想要的是,该部分对所有线程都被锁定,但仅限于具有相同用户的线程。我可以使用 getUserName() 对字符串对象加锁(如下面的示例所示)吗?

private void replicateUser(AuthenticatedUser authenticatedUser) {
//
// How to synchronize the following block correctly?
//
synchronized (authenticatedUser.getUserName()) {
User dbUser = userRepository.findOne(authenticatedUser.getUserName());
if (!checkIsUserReplicated(authenticatedUser, dbUser)) {
doReplication(dbUser);
}
}
}

最佳答案

你最好对authenticatedUser.getUserName().intern()加锁,因为可以保证一旦两个字符串内容相同,intern()将返回他们的对象相同。

此外,如果保证您的系统中只有一个具有特定用户名的 AuthenticatedUser 类实例,那么您可以直接锁定 authenticatedUser

关于java - 如何高效地锁定代码块以避免乐观锁异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691850/

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