Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 11. Многопоточное программирование. Общие принципы и реализация в Java.pptx

.pdf
Скачиваний:
152
Добавлен:
16.03.2015
Размер:
189.16 Кб
Скачать

Синхронизация

n Синхронизированный блок

//Блокируется указанный объект synchronized (ссылкаНаОбъект>) { // Тело блока синхронизации

}

n Синхронизированный метод

//Блокируется объект-владелец метода public synchronized void метод() {

// Тело метода

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

21

Новые виды ошибок

nОтсутствие синхронизации

nНеобоснованная длительная блокировка объектов

nВзаимная блокировка (deadlock)

nВозникновение монопольных потоков

nНерациональное назначение приоритетов

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

22

Совместная работа с полями и переменными

nЗначения переменных изменяются атомарным образом

nПри совместной работе с полем может возникнуть неоднозначность

Например, на объект, на который ссылается переменная, наложена блокировка, после чего значение переменной изменяется

Например, компилятор может оптимизировать фрагмент кода, предполагая, что поле не изменяет значение

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

23

Модификатор полей и переменных final

nПосле первого присвоения переменная не может изменять своё значение

nЕсли блокировка накладывается на объект, ссылка на который хранится в поле, поле обычно делают неизменяемым

nЛокальные и анонимные классы могут обращаться к локальным переменным, только если они неизменяемы

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

24

Модификатор полей volatile

nПредупреждает компилятор о том, что переменная может изменить своё

значение в произвольный момент времени

nОбращение к переменной всегда будет возвращать именно последнее присвоенное ей значение

nЕсли работа с полем ведётся только в синхронизированном коде, применение модификатора неосмысленно

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

25

Специальные методы класса Object

nКаждый объект имеет набор ожидающих потоков исполнения (wait-set)

nЛюбой поток может вызвать метод wait() любого объекта и попасть в его wait-set, остановившись до пробуждения

nМетод объекта notify() пробуждает один, случайно выбранный поток из wait-set объекта

nМетод объекта notifyAll() пробуждает все потоки из wait-set объекта

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

26

Особенности использования методов класса Object

nМетод может быть вызван потоком у объекта только после установления блокировки на этот объект

nПотоки, прежде чем приостановить выполнение после вызова метода wait(), снимают все свои блокировки

nПосле вызова освобождающего метода потоки пытаются восстановить ранее снятые блокировки

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

27

Запрещенные действия над потоками

nThread.suspend(), Thread.resume()

Увеличивает количество взаимных блокировок

nThread.stop()

Использование приводит к возникновению поврежденных объектов

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

28

Корректное прерывание потока

n public void interrupt()

Изменяет статус потока на прерванный

n public static boolean interrupted()

Возвращает и очищает статус потока (прерван или нет)

n public boolean isInterrupted()

Возвращает статус потока (прерван или нет)

nПоток должен в ходе своей работы проверять свой статус и корректно завершать работу, если его прервали

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

29

А если поток «спит»?

nВ том случае, если в текущий момент поток выполняет методы wait(), sleep(), join(), а его прерывают вызовом метода interrupt()

nметод прерывает свое выполнение с выбросом исключения

InterruptedException !

nПотоку не сообщается, что его прервали!

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

30