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

Какие типы мониторных объектов используются в Java и как они функционируют?

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

sobes.tech AI

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

Типы мониторных объектов в Java:

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

  2. ReentrantLock из пакета java.util.concurrent.locks — более гибкий механизм блокировки, который также реализует мониторную концепцию, но с дополнительными возможностями (например, попытка захвата блокировки с таймаутом).

Как они функционируют:

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

Пример использования встроенного монитора:

public class Counter {
    private int count = 0;

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

    public synchronized int getCount() {
        return count;
    }
}

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