Является ли Map of Locks безопасным подходом для одновременных операций?

Требование состоит в том, что только одному потоку должно быть разрешено выполнять операции управления пользователем (создание / обновление / импорт), но нескольким потокам не разрешено выполнять операции пользователя одновременно для одного и того же пользователя. Например, когда поток A создает пользователя A, тогда одновременно потоку B не должно быть разрешено импортировать пользователя A или создавать пользователя A, но потоку B разрешено импортировать пользователя B. Безопасен ли приведенный ниже поток кода для этих требований?

public class UserManagement {

    ConcurrentHashMap<Integer, Lock> userLock = new ConcurrentHashMap<>();

    public void createUser(User user, Integer userId) {
        Lock lock = userLock.putIfAbsent(userId, new ReentrantLock());
        try {
            lock.lock();
            //create user logic
        } finally {
            lock.unlock();
        }
    }

    public void importUser(User user, Integer userId) {
        Lock lock = userLock.putIfAbsent(userId, new ReentrantLock());
        try {
            lock.lock();
            //import user logic
        } finally {
            lock.unlock();
        }
    }

    public void updateUser(User user, Integer userId) {
        Lock lock = userLock.putIfAbsent(userId, new ReentrantLock());
        try {
            lock.lock();
            // update user logic
        } finally {
            lock.unlock();
        }
    }
}

Ответы на вопрос(4)

Ваш ответ на вопрос