Книга: Основы программирования на Java
10.5. Синхронизация
10.5. Синхронизация
Когда двум или более подпроцессам требуется параллельный доступ к одним и тем же данным (иначе говоря, к совместно используемому ресурсу), нужно позаботиться о том, чтобы в каждый конкретный момент времени доступ к этим данным предоставлялся только одному из подпроцессов. Java для такой синхронизации предоставляет уникальную, встроенную в язык программирования поддержку. У каждого Java-объекта есть связанный с ним неявный монитор, а для того чтобы войти в него, надо вызвать метод этого объекта, отмеченный ключевым словом synchronized. Для того чтобы выйти из монитора и тем самым передать управление объектом другому подпроцессу, владелец монитора должен всего лишь вернуться из синхронизованного метода. Если у вас есть метод (или целая группа методов), который манипулирует внутренним состоянием объекта, используемого в программе с параллельными подпроцессами, во избежание состояния гонки вам следует использовать в его заголовке ключевое слово synchronized.
В Java имеется элегантный механизм общения между подпроцессами, основанный на методах wait, notify и notifyAll. Эти методы реализованы как final- методы класса Object, так что они имеются в любом Java-Knacce. Все эти методы должны вызываться только из синхронизованных методов. Правила использования этих методов очень просты:
1. wait — приводит к тому, что текущий подпроцесс отдает управление и переходит в режим ожидания до тех пор пока другой подпроцесс не вызовет метод notify с тем же объектом;
2. notify — выводит из состояния ожидания первый из подпроцессов, вызвавших wait с данным объектом;
3. notifyAll — выводит из состояния ожидания все подпроцессы, вызвавшие wait с данным объектом.
- ЧАСТЬ 3 СИНХРОНИЗАЦИЯ
- 2.15. Синхронизация данных
- Синхронизация с помощью мьютексов
- Синхронизация и параллелизм
- Синхронизация с помощью семафоров
- 1 Синхронизация данных
- Подключение сетевых дисков и синхронизация времени при регистрации пользователей
- ГЛАВА 8 Синхронизация потоков
- Синхронизация куч
- 13.2.2. Синхронизация доступа к ресурсам (mutex.rb)
- 12. Лекция: Потоки выполнения. Синхронизация
- Синхронизация содержимого списка SharePoint Задачи