﻿# V6095\. Thread\.sleep\(\) inside synchronized block/method may cause decreased performance\.

Анализатор обнаружил фрагмент кода, в котором внутри синхронизированной функции или блока синхронизации выполнен вызов 'Thread\.sleep\(\.\.\.\.\)'\. 

При вызове 'Thread\.sleep\(\.\.\.\.\)' текущий поток засыпает, продолжая удерживать захваченный монитор объекта\. Это приводит к тому, что другие потоки, пытающиеся выполнить синхронизацию на этом объекте, будут простаивать в ожидании пробуждения потока\. Это может привести к понижению производительности, а в некоторых случаях даже к взаимной блокировке потоков\.

Рассмотрим пример подобного кода:

```cpp
private final Object lock = new Object();
public void doSomething() {
  synchronized(lock) {
    ....
    Thread.sleep(1000);
    .... 
  }
}
```

Вместо 'Thread\.sleep\(\)' лучше использовать метод** **'lock\.wait\(\.\.\.\.\)', который переведет текущий поток в ожидание на указанное время с освобождением монитора, что позволит другим потокам не простаивать\. Однако необходимо учитывать, что поток в этом случае может быть ''разбужен'' ранее указанного времени\. Поэтому обычно следует проверять какое\-либо условие, подтверждающее, что пробуждение потока произошло не ранее, чем планировалось разработчиком:

```cpp
private final Object lock = new Object();
public void doSomething() {
  synchronized(lock) {
    ....
    while(!ready()) {
      lock.wait(1000)
    }
    ....
  }
}
```