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

Категория: Образование
Нажмите для полного просмотра!
Многопоточное программирование, слайд №1Многопоточное программирование, слайд №2Многопоточное программирование, слайд №3Многопоточное программирование, слайд №4Многопоточное программирование, слайд №5Многопоточное программирование, слайд №6Многопоточное программирование, слайд №7Многопоточное программирование, слайд №8Многопоточное программирование, слайд №9Многопоточное программирование, слайд №10Многопоточное программирование, слайд №11Многопоточное программирование, слайд №12Многопоточное программирование, слайд №13Многопоточное программирование, слайд №14Многопоточное программирование, слайд №15Многопоточное программирование, слайд №16Многопоточное программирование, слайд №17Многопоточное программирование, слайд №18Многопоточное программирование, слайд №19Многопоточное программирование, слайд №20Многопоточное программирование, слайд №21Многопоточное программирование, слайд №22Многопоточное программирование, слайд №23Многопоточное программирование, слайд №24Многопоточное программирование, слайд №25Многопоточное программирование, слайд №26Многопоточное программирование, слайд №27Многопоточное программирование, слайд №28Многопоточное программирование, слайд №29Многопоточное программирование, слайд №30Многопоточное программирование, слайд №31Многопоточное программирование, слайд №32Многопоточное программирование, слайд №33Многопоточное программирование, слайд №34Многопоточное программирование, слайд №35Многопоточное программирование, слайд №36Многопоточное программирование, слайд №37Многопоточное программирование, слайд №38Многопоточное программирование, слайд №39Многопоточное программирование, слайд №40

Содержание

Вы можете ознакомиться и скачать презентацию на тему Многопоточное программирование. Доклад-сообщение содержит 40 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Многопоточное программирование
Описание слайда:
Многопоточное программирование

Слайд 2





План лекции
Потоки инструкций и многопоточное программирование
Создание потоков и управление ими
Совместное использование ресурсов и блокировки
Взаимодействие между потоками
Описание слайда:
План лекции Потоки инструкций и многопоточное программирование Создание потоков и управление ими Совместное использование ресурсов и блокировки Взаимодействие между потоками

Слайд 3





Проблемы однопоточного подхода
Монопольный захват задачей процессорного времени
Смешение логически несвязанных фрагментов кода
Попытка их разделения приводит к возникновению в программе новых систем и усложнению кода
Описание слайда:
Проблемы однопоточного подхода Монопольный захват задачей процессорного времени Смешение логически несвязанных фрагментов кода Попытка их разделения приводит к возникновению в программе новых систем и усложнению кода

Слайд 4





Многопоточное программирование
Последовательно выполняющиеся инструкции составляют поток
Потоки выполняются
независимо
Потоки могут взаимодействовать друг с другом
В многоядерной системе поток монопольно занимает одно ядро
Описание слайда:
Многопоточное программирование Последовательно выполняющиеся инструкции составляют поток Потоки выполняются независимо Потоки могут взаимодействовать друг с другом В многоядерной системе поток монопольно занимает одно ядро

Слайд 5





Многопоточная архитектура
При наличии нескольких процессоров теоретически каждому можно выделить отдельную задачу
Что же делать, если используется вычислительная система с одним процессором?
Описание слайда:
Многопоточная архитектура При наличии нескольких процессоров теоретически каждому можно выделить отдельную задачу Что же делать, если используется вычислительная система с одним процессором?

Слайд 6





Квантование времени
(Time-Slicing)
Время разделяется на интервалы (кванты времени)
Во время одного кванта обрабатывается один поток команд
Решение о выборе потока принимается до начала интервала
Переключения между потоками с высокой частотой
Иллюзия одновременности!
Описание слайда:
Квантование времени (Time-Slicing) Время разделяется на интервалы (кванты времени) Во время одного кванта обрабатывается один поток команд Решение о выборе потока принимается до начала интервала Переключения между потоками с высокой частотой Иллюзия одновременности!

Слайд 7





Преимущества
Одновременная работа нескольких приложений
Одновременное обслуживание нескольких запросов одним приложением
Одновременное обработка входящих данных от нескольких устройств
Более гибкое управление выполнением задач, возможность корректировки задачи
Описание слайда:
Преимущества Одновременная работа нескольких приложений Одновременное обслуживание нескольких запросов одним приложением Одновременное обработка входящих данных от нескольких устройств Более гибкое управление выполнением задач, возможность корректировки задачи

Слайд 8





Особенности многопоточности
Простота выделения подзадач
Более медленное выполнение
Выигрыш в скорости выполнения
при разделении задач по используемым ресурсам
Выигрыш в скорости выполнения на многоядерных системах
Недетерминизм при выполнении
Описание слайда:
Особенности многопоточности Простота выделения подзадач Более медленное выполнение Выигрыш в скорости выполнения при разделении задач по используемым ресурсам Выигрыш в скорости выполнения на многоядерных системах Недетерминизм при выполнении

Слайд 9





Класс Thread
Поток выполнения представляется экземпляром класса Thread
Для создания потока выполнения можно
создать класс, наследующий Thread
переопределить метод run()
Для запуска потока используется метод start() у объекта класса-наследника
Описание слайда:
Класс Thread Поток выполнения представляется экземпляром класса Thread Для создания потока выполнения можно создать класс, наследующий Thread переопределить метод run() Для запуска потока используется метод start() у объекта класса-наследника

Слайд 10





Использование класса Thread
Описание класса
Запуск потока
Описание слайда:
Использование класса Thread Описание класса Запуск потока

Слайд 11





Пример работы с Thread
Описание класса
Описание слайда:
Пример работы с Thread Описание класса

Слайд 12





Интерфейс Runnable
Объявляет один метод – void run()
Объект данного типа не является потоком
Невозможно использовать напрямую методы класса Thread
Возможность создать класс, описывающий тело потока и наследующий от класса, отличного от Thread
Можно получить ссылку на объект текущего потока с помощью статического метода currentThread() класса Thread
Описание слайда:
Интерфейс Runnable Объявляет один метод – void run() Объект данного типа не является потоком Невозможно использовать напрямую методы класса Thread Возможность создать класс, описывающий тело потока и наследующий от класса, отличного от Thread Можно получить ссылку на объект текущего потока с помощью статического метода currentThread() класса Thread

Слайд 13





Использование интерфейса Runnable
Описание класса
Описание слайда:
Использование интерфейса Runnable Описание класса

Слайд 14





Пример работы с Runnable
Описание слайда:
Пример работы с Runnable

Слайд 15





Управление потоками
void start()
Запускает выполнение потока
void stop()
Прекращает выполнение потока
void suspend()
Приостанавливает выполнение потока
void resume()
Возобновляет выполнение потока
void join()
Останавливает выполнение текущего потока до завершения потока, у объекта которого был вызван метод
static void sleep(long millis)
Останавливает выполнение текущего потока как минимум на millis миллисекунд
static void yield() 
Приостанавливает выполнение текущего потока, предоставляет возможность выполнять другие потоки
Описание слайда:
Управление потоками void start() Запускает выполнение потока void stop() Прекращает выполнение потока void suspend() Приостанавливает выполнение потока void resume() Возобновляет выполнение потока void join() Останавливает выполнение текущего потока до завершения потока, у объекта которого был вызван метод static void sleep(long millis) Останавливает выполнение текущего потока как минимум на millis миллисекунд static void yield() Приостанавливает выполнение текущего потока, предоставляет возможность выполнять другие потоки

Слайд 16





Группы потоков
(ThreadGroup)
Каждый поток находится в группе
Группы потоков образуют дерево, корнем служит начальная группа
Поток не имеет доступа к информации о родительской группе
Изменение параметров и состояния группы влияет на все входящие в нее потоки
Описание слайда:
Группы потоков (ThreadGroup) Каждый поток находится в группе Группы потоков образуют дерево, корнем служит начальная группа Поток не имеет доступа к информации о родительской группе Изменение параметров и состояния группы влияет на все входящие в нее потоки

Слайд 17





Создание групп потоков
Создание группы
Создание потока
Описание слайда:
Создание групп потоков Создание группы Создание потока

Слайд 18





Операции в группе потоков
int activeCount()
Возвращает оценку количества потоков
int enumerate(Thread[] list)
Копирует в массив активные потоки
int activeGroupCount()
Возвращает оценку количества подгрупп
int enumerate(ThreadGroup[] list)
Копирует в массив активные подгруппы
void interrupt()
Прерывает выполнение всех потоков в группе
Описание слайда:
Операции в группе потоков int activeCount() Возвращает оценку количества потоков int enumerate(Thread[] list) Копирует в массив активные потоки int activeGroupCount() Возвращает оценку количества подгрупп int enumerate(ThreadGroup[] list) Копирует в массив активные подгруппы void interrupt() Прерывает выполнение всех потоков в группе

Слайд 19





Приоритеты потоков
Приоритет – количественный показатель важности потока
Недетерминированно воздействуют на системную политику упорядочивания потоков
Базовый алгоритм программы не должен зависеть от схемы расстановки приоритетов потоков
При задании значений приоритетов рекомендуется использовать константы
Описание слайда:
Приоритеты потоков Приоритет – количественный показатель важности потока Недетерминированно воздействуют на системную политику упорядочивания потоков Базовый алгоритм программы не должен зависеть от схемы расстановки приоритетов потоков При задании значений приоритетов рекомендуется использовать константы

Слайд 20





Приоритеты потоков
Константы
static int MAX_PRIORITY 
static int MIN_PRIORITY
static int NORM_PRIORITY
Методы потока
int getPriority() 
void setPriority(int newPriority) 
Методы группы потоков
int getMaxPriority() 
void setMaxPriority(int priority)
Описание слайда:
Приоритеты потоков Константы static int MAX_PRIORITY static int MIN_PRIORITY static int NORM_PRIORITY Методы потока int getPriority() void setPriority(int newPriority) Методы группы потоков int getMaxPriority() void setMaxPriority(int priority)

Слайд 21





Приоритеты потоков
Описание слайда:
Приоритеты потоков

Слайд 22





Приоритеты потоков
Описание слайда:
Приоритеты потоков

Слайд 23





Демон-потоки
(Daemons)
Демон-потоки позволяют описывать фоновые процессы, которые нужны только для обслуживания основных потоков выполнения и не могут существовать без них
Уничтожаются виртуальной машиной, если в группе не осталось не-демон потоков
void setDaemon(boolean on)
Устанавливает вид потока. 
Вызывается до запуска потока
boolean isDaemon() 
Возвращает вид потока:
true – демон, false – обычный
Описание слайда:
Демон-потоки (Daemons) Демон-потоки позволяют описывать фоновые процессы, которые нужны только для обслуживания основных потоков выполнения и не могут существовать без них Уничтожаются виртуальной машиной, если в группе не осталось не-демон потоков void setDaemon(boolean on) Устанавливает вид потока. Вызывается до запуска потока boolean isDaemon() Возвращает вид потока: true – демон, false – обычный

Слайд 24





Демон-группы потоков
Демон-группа автоматически уничтожается при остановке последнего ее потока или уничтожении последней подгруппы потоков
void setDaemon(boolean on)
Устанавливает вид группы

boolean isDaemon() 
Возвращает вид группы:
true – демон, false – обычная
Описание слайда:
Демон-группы потоков Демон-группа автоматически уничтожается при остановке последнего ее потока или уничтожении последней подгруппы потоков void setDaemon(boolean on) Устанавливает вид группы boolean isDaemon() Возвращает вид группы: true – демон, false – обычная

Слайд 25





Неконтролируемое совместное использование ресурсов
Недетерминизм программы
Конечный результат работы программы непредсказуем
Некорректность работы программы
Возможность некорректной работы алгоритма, возникновения исключительных ситуаций
Описание слайда:
Неконтролируемое совместное использование ресурсов Недетерминизм программы Конечный результат работы программы непредсказуем Некорректность работы программы Возможность некорректной работы алгоритма, возникновения исключительных ситуаций

Слайд 26





Неконтролируемое совместное использование ресурсов
Описание слайда:
Неконтролируемое совместное использование ресурсов

Слайд 27





Блокировки
Только один поток в один момент времени может установить блокировку на некоторый объект
Попытка блокировки уже заблокированного объекта приводит к приостановке потока до момента разблокирования этого объекта
Наличие блокировки не запрещает всех остальных действий с объектом
Описание слайда:
Блокировки Только один поток в один момент времени может установить блокировку на некоторый объект Попытка блокировки уже заблокированного объекта приводит к приостановке потока до момента разблокирования этого объекта Наличие блокировки не запрещает всех остальных действий с объектом

Слайд 28





Блокировки
Описание слайда:
Блокировки

Слайд 29





Синхронизация
Синхронизированный блок
Синхронизированный метод
Описание слайда:
Синхронизация Синхронизированный блок Синхронизированный метод

Слайд 30





Характерные ошибки
Отсутствие синхронизации
Необоснованная длительная блокировка объектов
Взаимная блокировка (deadlock)
Возникновение монопольных потоков
Нерациональное назначение приоритетов
Описание слайда:
Характерные ошибки Отсутствие синхронизации Необоснованная длительная блокировка объектов Взаимная блокировка (deadlock) Возникновение монопольных потоков Нерациональное назначение приоритетов

Слайд 31





Специальные методы
класса Object
Каждый объект имеет набор ожидающих потоков исполнения (wait-set)
Любой поток может вызвать метод wait() любого объекта и попасть в его wait-set, остановившись до пробуждения
Метод объекта notify() пробуждает один, случайно выбранный поток из wait-set объекта
Метод объекта notifyAll() пробуждает все потоки из wait-set объекта
Описание слайда:
Специальные методы класса Object Каждый объект имеет набор ожидающих потоков исполнения (wait-set) Любой поток может вызвать метод wait() любого объекта и попасть в его wait-set, остановившись до пробуждения Метод объекта notify() пробуждает один, случайно выбранный поток из wait-set объекта Метод объекта notifyAll() пробуждает все потоки из wait-set объекта

Слайд 32





Особенности использования методов класса Object
Метод может быть вызван потоком у объекта только после установления блокировки на этот объект
Потоки, прежде чем приостановить выполнение после вызова метода wait(), снимают все свои блокировки
После вызова освобождающего метода потоки пытаются восстановить ранее снятые блокировки
Описание слайда:
Особенности использования методов класса Object Метод может быть вызван потоком у объекта только после установления блокировки на этот объект Потоки, прежде чем приостановить выполнение после вызова метода wait(), снимают все свои блокировки После вызова освобождающего метода потоки пытаются восстановить ранее снятые блокировки

Слайд 33





Запрещенные действия 
над потоками
Thread.suspend(), Thread.resume()
	Увеличивает количество взаимных блокировок

Thread.stop()
	Использование приводит к возникновению поврежденных объектов
Описание слайда:
Запрещенные действия над потоками Thread.suspend(), Thread.resume() Увеличивает количество взаимных блокировок Thread.stop() Использование приводит к возникновению поврежденных объектов

Слайд 34





Прерывание потока
public void interrupt()
Изменяет статус потока на прерванный
public static boolean interrupted()
Возвращает и очищает  статус потока (прерван или нет)
public boolean isInterrupted()
Возвращает статус потока (прерван или нет)

Поток должен в ходе своей работы проверять свой статус и корректно завершать работу, если его прервали
Описание слайда:
Прерывание потока public void interrupt() Изменяет статус потока на прерванный public static boolean interrupted() Возвращает и очищает статус потока (прерван или нет) public boolean isInterrupted() Возвращает статус потока (прерван или нет) Поток должен в ходе своей работы проверять свой статус и корректно завершать работу, если его прервали

Слайд 35





А если поток «спит»?
В том случае, если в текущий момент поток выполняет методы wait(), sleep(), join(), а его прерывают вызовом метода interrupt()…
метод прерывает свое выполнение с выбросом исключения InterruptedException !
Потоку не сообщается, что его прервали!
Описание слайда:
А если поток «спит»? В том случае, если в текущий момент поток выполняет методы wait(), sleep(), join(), а его прерывают вызовом метода interrupt()… метод прерывает свое выполнение с выбросом исключения InterruptedException ! Потоку не сообщается, что его прервали!

Слайд 36





Пример кода 
объекта-посредника
Описание слайда:
Пример кода объекта-посредника

Слайд 37





Пример кода 
объекта-посредника
Описание слайда:
Пример кода объекта-посредника

Слайд 38





Отличия wait() и sleep()
wait() вызывается потоком у объекта, а sleep() вызывается для потока
ожидающий поток можно запустить методами notifyAll() или notify(), а «спящий» поток «разбудить» нельзя
wait() вызывается из синхронизированного контекста, а для sleep() это не обязательно
wait() обычно вызывается при условии, причем поток освобождает блокировку на объект
Описание слайда:
Отличия wait() и sleep() wait() вызывается потоком у объекта, а sleep() вызывается для потока ожидающий поток можно запустить методами notifyAll() или notify(), а «спящий» поток «разбудить» нельзя wait() вызывается из синхронизированного контекста, а для sleep() это не обязательно wait() обычно вызывается при условии, причем поток освобождает блокировку на объект

Слайд 39






Спасибо за внимание!
Описание слайда:
Спасибо за внимание!

Слайд 40





Дополнительные источники
Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с.
Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с.
Хорстманн, К. Java 2. Библиотека профессионала. Том 2. Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 992 с.
Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с.
JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html, дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html, дата доступа: 21.10.2011.
Описание слайда:
Дополнительные источники Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с. Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с. Хорстманн, К. Java 2. Библиотека профессионала. Том 2. Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 992 с. Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с. JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html, дата доступа: 21.10.2011. JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html, дата доступа: 21.10.2011.



Похожие презентации
Mypresentation.ru
Загрузить презентацию