Презентация - Многопоточное программирование

Смотреть слайды в полном размере
Презентация Многопоточное программирование


Вашему вниманию предлагается презентация на тему «Многопоточное программирование», с которой можно предварительно ознакомиться, просмотреть текст и слайды к ней, а так же, в случае, если она вам подходит - скачать файл для редактирования или печати.

Презентация содержит 40 слайдов и доступна для скачивания в формате ppt. Размер скачиваемого файла: 506.50 KB

Просмотреть и скачать

Pic.1
Многопоточное программирование
Многопоточное программирование
Pic.2
План лекции Потоки инструкций и многопоточное программирование Создание потоков и управление ими Сов
План лекции Потоки инструкций и многопоточное программирование Создание потоков и управление ими Совместное использование ресурсов и блокировки Взаимодействие между потоками
Pic.3
Проблемы однопоточного подхода Монопольный захват задачей процессорного времени Смешение логически н
Проблемы однопоточного подхода Монопольный захват задачей процессорного времени Смешение логически несвязанных фрагментов кода Попытка их разделения приводит к возникновению в программе новых систем и усложнению кода
Pic.4
Многопоточное программирование Последовательно выполняющиеся инструкции составляют поток Потоки выпо
Многопоточное программирование Последовательно выполняющиеся инструкции составляют поток Потоки выполняются независимо Потоки могут взаимодействовать друг с другом В многоядерной системе поток монопольно занимает одно ядро
Pic.5
Многопоточная архитектура При наличии нескольких процессоров теоретически каждому можно выделить отд
Многопоточная архитектура При наличии нескольких процессоров теоретически каждому можно выделить отдельную задачу Что же делать, если используется вычислительная система с одним процессором?
Pic.6
Квантование времени (Time-Slicing) Время разделяется на интервалы (кванты времени) Во время одного к
Квантование времени (Time-Slicing) Время разделяется на интервалы (кванты времени) Во время одного кванта обрабатывается один поток команд Решение о выборе потока принимается до начала интервала Переключения между потоками с высокой частотой Иллюзия одновременности!
Pic.7
Преимущества Одновременная работа нескольких приложений Одновременное обслуживание нескольких запрос
Преимущества Одновременная работа нескольких приложений Одновременное обслуживание нескольких запросов одним приложением Одновременное обработка входящих данных от нескольких устройств Более гибкое управление выполнением задач, возможность корректировки задачи
Pic.8
Особенности многопоточности Простота выделения подзадач Более медленное выполнение Выигрыш в скорост
Особенности многопоточности Простота выделения подзадач Более медленное выполнение Выигрыш в скорости выполнения при разделении задач по используемым ресурсам Выигрыш в скорости выполнения на многоядерных системах Недетерминизм при выполнении
Pic.9
Класс Thread Поток выполнения представляется экземпляром класса Thread Для создания потока выполнени
Класс Thread Поток выполнения представляется экземпляром класса Thread Для создания потока выполнения можно создать класс, наследующий Thread переопределить метод run() Для запуска потока используется метод start() у объекта класса-наследника
Pic.10
Использование класса Thread Описание класса Запуск потока
Использование класса Thread Описание класса Запуск потока
Pic.11
Пример работы с Thread Описание класса
Пример работы с Thread Описание класса
Pic.12
Интерфейс Runnable Объявляет один метод – void run() Объект данного типа не является потоком Невозмо
Интерфейс Runnable Объявляет один метод – void run() Объект данного типа не является потоком Невозможно использовать напрямую методы класса Thread Возможность создать класс, описывающий тело потока и наследующий от класса, отличного от Thread Можно получить ссылку на объект текущего потока с помощью статического метода currentThread() класса Thread
Pic.13
Использование интерфейса Runnable Описание класса
Использование интерфейса Runnable Описание класса
Pic.14
Пример работы с Runnable
Пример работы с Runnable
Pic.15
Управление потоками void start() Запускает выполнение потока void stop() Прекращает выполнение поток
Управление потоками void start() Запускает выполнение потока void stop() Прекращает выполнение потока void suspend() Приостанавливает выполнение потока void resume() Возобновляет выполнение потока void join() Останавливает выполнение текущего потока до завершения потока, у объекта которого был вызван метод static void sleep(long millis) Останавливает выполнение текущего потока как минимум на millis миллисекунд static void yield() Приостанавливает выполнение текущего потока, предоставляет возможность выполнять другие потоки
Pic.16
Группы потоков (ThreadGroup) Каждый поток находится в группе Группы потоков образуют дерево, корнем
Группы потоков (ThreadGroup) Каждый поток находится в группе Группы потоков образуют дерево, корнем служит начальная группа Поток не имеет доступа к информации о родительской группе Изменение параметров и состояния группы влияет на все входящие в нее потоки
Pic.17
Создание групп потоков Создание группы Создание потока
Создание групп потоков Создание группы Создание потока
Pic.18
Операции в группе потоков int activeCount() Возвращает оценку количества потоков int enumerate(Threa
Операции в группе потоков int activeCount() Возвращает оценку количества потоков int enumerate(Thread[] list) Копирует в массив активные потоки int activeGroupCount() Возвращает оценку количества подгрупп int enumerate(ThreadGroup[] list) Копирует в массив активные подгруппы void interrupt() Прерывает выполнение всех потоков в группе
Pic.19
Приоритеты потоков Приоритет – количественный показатель важности потока Недетерминированно воздейст
Приоритеты потоков Приоритет – количественный показатель важности потока Недетерминированно воздействуют на системную политику упорядочивания потоков Базовый алгоритм программы не должен зависеть от схемы расстановки приоритетов потоков При задании значений приоритетов рекомендуется использовать константы
Pic.20
Приоритеты потоков Константы static int MAX_PRIORITY static int MIN_PRIORITY static int NORM_PRIORIT
Приоритеты потоков Константы static int MAX_PRIORITY static int MIN_PRIORITY static int NORM_PRIORITY Методы потока int getPriority() void setPriority(int newPriority) Методы группы потоков int getMaxPriority() void setMaxPriority(int priority)
Pic.21
Приоритеты потоков
Приоритеты потоков
Pic.22
Приоритеты потоков
Приоритеты потоков
Pic.23
Демон-потоки (Daemons) Демон-потоки позволяют описывать фоновые процессы, которые нужны только для о
Демон-потоки (Daemons) Демон-потоки позволяют описывать фоновые процессы, которые нужны только для обслуживания основных потоков выполнения и не могут существовать без них Уничтожаются виртуальной машиной, если в группе не осталось не-демон потоков void setDaemon(boolean on) Устанавливает вид потока. Вызывается до запуска потока boolean isDaemon() Возвращает вид потока: true – демон, false – обычный
Pic.24
Демон-группы потоков Демон-группа автоматически уничтожается при остановке последнего ее потока или
Демон-группы потоков Демон-группа автоматически уничтожается при остановке последнего ее потока или уничтожении последней подгруппы потоков void setDaemon(boolean on) Устанавливает вид группы boolean isDaemon() Возвращает вид группы: true – демон, false – обычная
Pic.25
Неконтролируемое совместное использование ресурсов Недетерминизм программы Конечный результат работы
Неконтролируемое совместное использование ресурсов Недетерминизм программы Конечный результат работы программы непредсказуем Некорректность работы программы Возможность некорректной работы алгоритма, возникновения исключительных ситуаций
Pic.26
Неконтролируемое совместное использование ресурсов
Неконтролируемое совместное использование ресурсов
Pic.27
Блокировки Только один поток в один момент времени может установить блокировку на некоторый объект П
Блокировки Только один поток в один момент времени может установить блокировку на некоторый объект Попытка блокировки уже заблокированного объекта приводит к приостановке потока до момента разблокирования этого объекта Наличие блокировки не запрещает всех остальных действий с объектом
Pic.28
Блокировки
Блокировки
Pic.29
Синхронизация Синхронизированный блок Синхронизированный метод
Синхронизация Синхронизированный блок Синхронизированный метод
Pic.30
Характерные ошибки Отсутствие синхронизации Необоснованная длительная блокировка объектов Взаимная б
Характерные ошибки Отсутствие синхронизации Необоснованная длительная блокировка объектов Взаимная блокировка (deadlock) Возникновение монопольных потоков Нерациональное назначение приоритетов
Pic.31
Специальные методы класса Object Каждый объект имеет набор ожидающих потоков исполнения (wait-set) Л
Специальные методы класса Object Каждый объект имеет набор ожидающих потоков исполнения (wait-set) Любой поток может вызвать метод wait() любого объекта и попасть в его wait-set, остановившись до пробуждения Метод объекта notify() пробуждает один, случайно выбранный поток из wait-set объекта Метод объекта notifyAll() пробуждает все потоки из wait-set объекта
Pic.32
Особенности использования методов класса Object Метод может быть вызван потоком у объекта только пос
Особенности использования методов класса Object Метод может быть вызван потоком у объекта только после установления блокировки на этот объект Потоки, прежде чем приостановить выполнение после вызова метода wait(), снимают все свои блокировки После вызова освобождающего метода потоки пытаются восстановить ранее снятые блокировки
Pic.33
Запрещенные действия над потоками Thread. suspend(), Thread. resume() Увеличивает количество взаимны
Запрещенные действия над потоками Thread. suspend(), Thread. resume() Увеличивает количество взаимных блокировок Thread. stop() Использование приводит к возникновению поврежденных объектов
Pic.34
Прерывание потока public void interrupt() Изменяет статус потока на прерванный public static boolean
Прерывание потока public void interrupt() Изменяет статус потока на прерванный public static boolean interrupted() Возвращает и очищает статус потока (прерван или нет) public boolean isInterrupted() Возвращает статус потока (прерван или нет) Поток должен в ходе своей работы проверять свой статус и корректно завершать работу, если его прервали
Pic.35
А если поток «спит»? В том случае, если в текущий момент поток выполняет методы wait(), sleep(), joi
А если поток «спит»? В том случае, если в текущий момент поток выполняет методы wait(), sleep(), join(), а его прерывают вызовом метода interrupt()… метод прерывает свое выполнение с выбросом исключения InterruptedException ! Потоку не сообщается, что его прервали!
Pic.36
Пример кода объекта-посредника
Пример кода объекта-посредника
Pic.37
Пример кода объекта-посредника
Пример кода объекта-посредника
Pic.38
Отличия wait() и sleep() wait() вызывается потоком у объекта, а sleep() вызывается для потока ожидаю
Отличия wait() и sleep() wait() вызывается потоком у объекта, а sleep() вызывается для потока ожидающий поток можно запустить методами notifyAll() или notify(), а «спящий» поток «разбудить» нельзя wait() вызывается из синхронизированного контекста, а для sleep() это не обязательно wait() обычно вызывается при условии, причем поток освобождает блокировку на объект
Pic.39
Спасибо за внимание!
Спасибо за внимание!
Pic.40
Дополнительные источники Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг,
Дополнительные источники Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с. Вязовик, Н. А. Программирование на Java. Курс лекций [Текст] / Н. А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с. Хорстманн, К. Java 2. Библиотека профессионала. Том 2. Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 992 с. Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с. JavaSE at a Glance [Электронный ресурс]. – Режим доступа: дата доступа: 21. 10. 2011. JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: дата доступа: 21. 10. 2011.


Скачать презентацию

Если вам понравился сайт и размещенные на нем материалы, пожалуйста, не забывайте поделиться этой страничкой в социальных сетях и с друзьями! Спасибо!