Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Бишоп Д. -> "Эффективная робота Java 2" -> 206

Эффективная робота Java 2 - Бишоп Д.

Бишоп Д. Эффективная робота Java 2 — Спб.: Питер, 2002. — 592 c.
ISBN 966-552-107-1
Скачать (прямая ссылка): effektivnayarabotajava2002.djvu
Предыдущая << 1 .. 200 201 202 203 204 205 < 206 > 207 208 209 210 211 212 .. 259 >> Следующая

. W S ' . ¦ .[ . .S , ... A-. - . ^ V ^-V,*X ^A V*<- / V . .. . ... J .¦. , . V «. V. S V > 'WJ.A > A . V. *A Л% ^ / V
. A,.;, , , A-X' xФх^А -S-xv fi '* 4 * , jit * .¦ « p.*
( : Л"' V " '• ¦ V V A A " .^ *¦ A ¦>” У . „ V tA"1-' і л v' ‘ ^ *" *
J----------------,---f I T • ..... Гі •*•" ' ‘~ ..і» * і ---:...... • ----.................................... - • •
synchronized modifiers methodld (parameters)
В каждое КОЩфСТНОе время этот метод может исполнять только один объект (оператор/ы тояько одного объекта).
К тому же Java гарантирует, что подпроцесс, получивший доступ к синхронизированному методу, закончит его до того, как любой другой подпроцесс сможет получить доступ к этому методу или любому другому синхронизированному методу данного объекта. Такие подпроцессы помещаются в очередь и ожидают, когда наступит их черед* Следовательно, подпроцесс имеет исключительный доступ к объекту из выполняемого синхронизированного метода. Можно сказать, что объект, л меющий один или более синхронизированных методов, выполняет мониторинг своих данн лх, поэтому он называется монитором* (monitor).
1 гобы не задерживать остальные подпроцессы, синхронизированные методы должны выполнять минимальный объем действий и содержать только те операторы, которые действительно восприимчивы к вмешательству извне.
* Мониторы представляют собой очень важную концепцию операционных систем* предложенную Пером Бринчем Хансеном (Per Brinch Hansen) и Тони Хоэ (Топу Ноаге) в начале 1970-х годов.
470
Глаэо 13. Работа с несколькими подпроцессами
Автопарки, обслуживающие живописные места
Задача. Существует множество живописных мест, откуда открываются великолепные панорамы. Есть такая точка обзора и возле Саванны, к которой ведут две дороги. Желающих посетить се обслуживают два автопарка. Мы хотели бы знать количество машин, въезжающих за определенное время на территорию каждого из автопарков и суммарное количество машин, прибывших в город для посещения панорамы.
Решение. Необходимо создать апплет, который бы показывал непосредственно вид, открывающийся с выбранной точки обзора, а также счетчики, отражающие количество автомобилей в трех заданных местах. В ближайшее время администрация Саванны, занимающаяся охраной природы, может принять решение об ограничении количества автомобилей, въезжающих в город. В таком случае автопарки могут использоваться как буферы, и мы должны иметь это в виду при разработке программы. Предлагаем создать апплет (а не приложение) и показать, как подпроцессы взаимодействуют с апплетами, Мы не будем использовать функции броузера, поэтому система рассчитана на просмотр апплетов в программе applet viewer.
Разработка. Нам нужно рассмотреть три различных счетчика, Главный, который учитывает машины, посетившие панораму, “принадлежит” непосредственно апплету. Остальные два будут работать независимо и, следовательно, относиться к двум дополнительным подпроцессам. Эти подпроцессы идентичны во всем, за исключением имени (Запад и Восток — восточный и западный автопарки), поэтому мы определим один класс-подпроцесс и создадим два его экземпляра.
Алгоритм* Учет машин, побывавших на территории панорамы, выполняется посредством вызова метода, который обновляет общее их количество и выводит это
а
значение на экран. Поскольку метод enter потенциально может быть вызван одновременно двумя подпроцессами и поскольку он обновляет переменную, мы объявим его ,как синхронизированный, гарантируя тем самым, что значение переменной будет правильным (вычислено без помех).
Программа. Рассмотрим текст программы.
import java.io.*; import }ava.applet; import java.awt.*; import java.uti1.*;
public class CarPark extends Applet {
/* Апплет "Автопарк" Автор Дж.М. Бишоп, январь 1998 г.
* ====—-^_======= Java 1.2, август 20 00 г.
+•
* Имитирует работу двух автопарков, обслуживающих панораму.
* Считывает и выводит на экран вид местности.
* Демонстрирует использование подпроцессов и
* синхронизированного метода« Может быть выполнен
* в программе просмотра апплетов.
*/
Image im;
Viewpoint view;
Dan^nm Ho 1 iir *= Ph А Ьь' СЗПГІ ГЧЧТ* if І ¦
i^CJ.11U <І_|ГЬ Lb ЧІМл _i_ U. J1 — і t Ч-r n 4 4.1,1 ,l J. Vi Чг* ^ ^ / f
public void init () {
Синхронизация роботы подпроцессов
471
// Считывает изображение„
im = getlntage (getCodeBase О , "reserve . jpg") ;
// Гарантирует, что изображение будет получено до того,
І/ как конструктор возобновит свою работу.
MediaTracker tracker = new MediaTracker(this); tracker .addlmage (im, 0) ,-try { tracker.waitForlD(0> ; }
catch (InterruptedException e) П *
Предыдущая << 1 .. 200 201 202 203 204 205 < 206 > 207 208 209 210 211 212 .. 259 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.