Назад к вопросам
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 гарантирует, что только один поток в конкретный момент времени выполняет защищённый код, обеспечивая корректность данных при многопоточном доступе.