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

Чем отличается использование ключевого слова synchronized от атомарных операций при обеспечении потокобезопасности в Java?

Компании, где спрашивали
ЯндексЯндекс

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

sobes.tech AI

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

Атомарные операции (например, классы из java.util.concurrent.atomic, такие как AtomicInteger) обеспечивают выполнение отдельных операций (например, инкремент, сравнение и установка) как неделимых, без использования блокировок. Они обычно быстрее, так как не вызывают блокировок, но ограничены по функциональности — подходят для простых операций над отдельными переменными.

Итого:

  • synchronized — блокирует участок кода, подходит для сложных операций и гарантирует взаимное исключение и видимость.
  • Атомарные операции — обеспечивают неделимость отдельных операций без блокировок, эффективны для простых случаев.

Пример атомарной операции:

import java.util.concurrent.atomic.AtomicInteger;

AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet(); // атомарный инкремент

Пример synchronized:

private int counter = 0;

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