Реферат Курсовая Конспект
СРЕДСТВА СИНХРОНИЗАЦИИ ПОТОКОВ - раздел Программирование, Язык программирования Java Средства Синхронизации Потоков. Как И Во Всякой Многопроцессной Или Многопото...
|
СРЕДСТВА СИНХРОНИЗАЦИИ ПОТОКОВ. Как и во всякой многопроцессной или многопотоковой среде, в Java существует проблема синхронизации доступа к разделяемым ресурсам.
Примером такого ресурса является буфер в задаче производитель потребитель. Для опытных программистов отметим, что модель синхронизации, принятая в языке Java, опирается на концепцию монитора, предложенную в 70-е годы Бринк- ансеном. В Java-программах можно выделять критические интервалы, которые обозначаются ключевым словом synchronized.
Если критическим интервалом является метод, спецификатор synchronized помещается в его метода заголовок. Для превращения произвольной инструкции обычно это блок в критический интервал служит конструкция synchronized выражение инструкция где результатом выражения должен быть объект или массив. Выполнение критического интервала начинается только после получения потоком монопольного доступа к соответствующему объекту или массиву.
До наступления этого момента поток блокируется. class my buffer Object vec new Object 8 int ip 0 int ep 0 synchronized void insert Object item do if ip-ep 8 vec ip 7 item if ip-ep 1 notify Уведомить, если буфер был пуст return try wait catch InterruptedException e while true synchronized Object extract do if ip ep Object result vec ep 7 if ip-ep 7 notify Уведомить, если буфер был полон return result try wait catch InterruptedException e while true class my producer extends Thread int items to do my buffer the buffer my producer my buffer buf, int count super the buffer buf items to do count public void run while items to do 0 System.out.println producer to do items to do Integer item new Integer items to do items to do the buffer.insert item items to do- System.out.println Производитель заканчивает работу class my consumer extends Thread int items to do my buffer the buffer my consumer my buffer buf, int count super the buffer buf items to do count public void run while items to do 0 System.out.println consumer to do items to do Object item the buffer.extract System.out.println consumer got item items to do- System.out.println Потребитель заканчивает работу synchronized this notify Посылаем уведомление о завершении работы см. con.wait в main public class threaded3 public static void main String args throws InterruptedException my buffer the buffer new my buffer my producer prod new my producer the buffer, 40 my consumer con new my consumer the buffer, 40 Thread.currentThread .setPriority 5 prod.setPriority 4 Производитель получает более высокий приоритет con.setPriority 3 по сравнению с потребителем prod.start con.start synchronized con con.wait Ждем уведомления от производителя об окончании его работы System.out.println Производитель и потребитель закончили работу Вызов wait внутри критического интервала приводит к тому, что текущий поток уступает монопольное право на критический интервал и приостанавливается до тех пор, пока из какого-либо другого потока не будет сделан вызов notify или notifyAll. Хорошей иллюстрацией использования средств синхронизации потоков является упоминавшаяся только что программа Марка Уиллотсона.
Приведенная программа написана в очень хорошем, понятном стиле.
В методах insert и extract класса my buffer вызов wait содержится внутри бесконечного цикла. Дело в том, что вызов notify относится к объекту в целом.
Разбуженный объект должен проанализировать свое состояние и решить, что делать дальше.
Так, если заснул метод insert, то после возобновления работы необходимо проверить, что буфер уже не полон и добавление нового элемента стало возможным.
Если это не так, метод insert заснет вновь. Библиотеки классов JavaЕсли предоставить в распоряжение программиста только язык программирования и не снабдить его набором готовых модулей, предназначенных для решения самых распространенных задач, ему придется отвлекаться на множество мелких деталей.
Обычно все профессиональные системы разработки приложений на языке программирования C содержат в своем составе набор стандартных библиотечных функций или библиотеки классов. В комплекте со всеми средствами разработки Java поставляются достаточно развитые библиотеки классов, значительно упрощающие программирование. В этом разделе мы кратко расскажем о составе и назначении библиотек классов Java. Встроенные классы. В языке Java все классы происходят от класса Object, и, соответственно, наследуют методы этого класса.
Некоторые библиотеки классов подключаются автоматически, и мы будем называть их встроенными. К таким относится, в частности, библиотека с названием java.lang. Другие библиотеки классов вы должны подключать в исходном тексте приложения Java явным образом с помощью оператора import.
– Конец работы –
Эта тема принадлежит разделу:
И тем не менее, уже довольно длительная история развития персональных компьютеров не знала ничего, подобного феномену Java. Что изменилось в мире в… Он стал доступен миллионам людей, далеких от технических проблем. Число пользователей Интернет по порядку величины уже не отличается от числа пользователей персональных компьютеров и…
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: СРЕДСТВА СИНХРОНИЗАЦИИ ПОТОКОВ
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов