# V6126. Native synchronization used on high-level concurrency class.

Анализатор обнаружил, что в `synchronized` передан наследник `java.util.concurrent.locks.Lock`, `java.util.concurrent.locks.Condition`, `java.util.concurrent.locks.ReadWriteLock` и/или `java.util.concurrent.locks.StampedLock`.

Вышеперечисленные классы относятся к классам параллелизма высокого уровня, и их применение в `synchronized` является ошибочным. Вместо этого следует применять высокоуровневые средства блокировки, предоставляемые самим классом.

Использование `synchronized` с такими объектами создаёт две независимые системы синхронизации: на уровне монитора объекта (через `synchronized`) и на уровне собственного механизма блокировок класса. Это может привести к:

- нарушению целостности синхронизации;
- состоянию гонки (race condition);
- взаимным блокировкам (deadlock);
- непредсказуемому поведению программы.

Ошибочный код выглядит следующим образом:

    Lock lock = new ReentrantLock();

    synchronized(lock) {
        ....
    }

Исправленный вариант представлен ниже:

    Lock lock = new ReentrantLock();

    lock.lock();
    try {
        ....
    } finally {
        lock.unlock();
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки при работе с многопоточными примитивами (интерфейсами запуска потоков на выполнение, синхронизации и обмена данными между потоками и пр.).

Данная диагностика классифицируется как:

CWE-821 CERT-LCK03-J