Составители:
Выбранный поток начинает соревноваться с другими потоками за
возможность продолжить выполнение синхронизированного метода,
из которого он был переведен в состояние ожидания. Получив доступ
к этому методу, он продолжит его выполнение с инструкции, сле-
дующей непосредственно за вызовом метода wait(). Если включить
вызов wait() в цикл while, поток сможет повторно проверить ус-
ловие, прежде чем войдет в критический участок.
Метод notify() используется, когда нужно активизировать только
один из ожидающих потоков, причем не важно, какой именно.
Метод notifyAll() применяется, если необходимо активизировать
множество потоков или важно выбрать конкретный поток. После его
выполнения будут активизированы все потоки, ожидающие у данного
объекта.
2. Создание синхронизирующего блока
Используется для организации доступа к объектам класса, не
разработанного для многопоточного доступа (например, к массивам)
или созданного другим программистом (нет доступа к исходному ко-
ду). Необходимо поместить вызовы методов в синхронизирующий
блок путем использования оператора
synchronized, имеющего
следующий синтаксис:
synchronized (object){
// операторы, которые необходимо синхронизировать
}
Оператор
synchronized полезен при непосредственном изменении
общих переменных объекта.
Пример
void call(SomeClassobj){
synchronized(obj){
obj.variable=5;
66
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »