Операционные системы. Процессы и потоки. Илюшкин Б.И. - 64 стр.

UptoLike

Составители: 

условной синхронизации, wait(), notify(), notifyall(), определенных в
классе Object и поэтому наследуемых любым другим классом. В каж-
дый объект Java встроена возможность монопольной блокировки и
одна условная переменная. Если объявить метод объекта как
synchronized , для его выполнения вызывающему коду необходимо
получить монопольную блокировку объекта. У каждого объекта в
Java имеется свой собственный неявный монитор. Когда метод типа
synchronized вызывается для объекта, происходит обращение к мони-
тору объекта чтобы определить, выполняет ли в данный момент ка-
кой-либо другой поток метод типа
synchronized для данного объекта.
Если нет, то текущий поток получает разрешение войти в монитор.
Вход в монитор называется также блокировкой (locking) монитора.
Если при этом другой поток уже вошел в монитор, то текущий поток
должен ожидать до тех пор, пока другой поток не покинет монитор.
Таким образом, монитор Java вводит поочередность в параллельную
обработку. Этот способ называется также преобразованием в после-
довательную форму (serialization). Объявление метода
synchronized
не подразумевает, что только один поток может одновременно вы-
полнять этот метод, как в случае критического участка. В любой мо-
мент времени только один поток может вызвать этот метод (или лю-
бой другой метод типа
synchronized) для конкретного объекта. Таким
образом, мониторы Java связаны с объектами, но не с блоками кода.
Два потока могут параллельно выполнять один и тот же метод типа
synchronized при условии, что этот метод вызван для разных объек-
тов. Мониторы не являются объектами языка Java, у них нет атрибу-
тов или методов. Доступ к мониторам возможен на уровне собствен-
ного кода JVM.
В Java есть два способа синхронизации потоков.
1. Создание синхронизирующего метода внутри класса
64