我对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);
}
}
}