私は 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);
}
}
}