Составители:
Используется при наличии метода или группы методов, обраба-
тывающих внутреннее состояние объекта в многопоточной среде.
Для организации последовательного доступа потоков к методу объ-
явление метода предваряется ключевым словом
synchronized.
class Callme{
synchronized void call(String msg){
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
}
Для условной синхронизации потоков предназначены три стандарт-
ных метода [6]:
o wait() – вызов данного метода в теле метода, объявленного
как
synchronized, приводит к снятию блокировки объекта,
блокированию текущего потока и установке его в очередь пото-
ков, ожидающих у данного объекта;
o notify() - вызов данного метода в теле метода, объявленного
как
synchronized, приводит к пробуждению одного из пото-
ков, ожидающих у данного объекта;
o notifyAll() – подобен методу notify() ,но вызывает
пробуждение всех потоков, ожидающих у данного объекта.
Поток, выполняющий синхронизированный метод некоторого объек-
та и достигший точки, в которой ему требуется условная синхрониза-
ция, вызывает метод wait() этого объекта. В результате выполне-
ние потока приостанавливается и он включается в набор ожидающих
потоков, связанных с данным объектом. Для выполнения ожидаемого
потоком условия необходимо перевести в определенное состояние
соответствующие данные. Ожидающий поток не может их изменить,
так как заблокирован. Это должен сделать другой поток, который за-
тем выполнит вызов notify() или notifyAll(). Метод
notify() инициирует выбор одного из потоков, ожидающих у дан-
ного объекта, и переводит выбранный поток в состояние готовности.
65
Страницы
- « первая
- ‹ предыдущая
- …
- 63
- 64
- 65
- 66
- 67
- …
- следующая ›
- последняя »