﻿# 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\);
* непредсказуемому поведению программы\.

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

```cpp
Lock lock = new ReentrantLock();

synchronized(lock) {
    ....
}
```

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

```cpp
Lock lock = new ReentrantLock();

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