Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V6126. Native synchronization used...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

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

17 Апр 2025

Анализатор обнаружил, что в 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 как критические и относятся к типу: Ошибки при работе с многопоточными примитивами (интерфейсами запуска потоков на выполнение, синхронизации и обмена данными между потоками и пр.).

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