Sobes.tech
Назад к вопросам
Junior — Middle
68

Можете объяснить, каким образом реализована синхронизация потоков с помощью ключевого слова synchronized в Java?

Ответ от нейросети

sobes.tech AI

Ключевое слово synchronized в Java используется для обеспечения синхронизации потоков и предотвращения одновременного доступа к критическим секциям кода, что помогает избежать состояний гонки.

Принцип работы:

  • Когда поток входит в блок или метод, помеченный synchronized, он захватывает монитор (замок) объекта.
  • Другие потоки, пытающиеся войти в этот же synchronized-блок или метод с тем же монитором, будут блокированы до освобождения замка.
  • После выхода из synchronized-блока монитор освобождается, и другой поток может войти.

Пример:

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

Здесь метод increment синхронизирован, поэтому даже если несколько потоков вызывают его одновременно, увеличение count будет атомарным.

Также можно синхронизировать блоки кода:

public void someMethod() {
    synchronized(this) {
        // критическая секция
    }
}

Таким образом, synchronized гарантирует, что только один поток в конкретный момент времени выполняет защищённый код, обеспечивая корректность данных при многопоточном доступе.