- •Многопоточное
- •План лекции
- •Проблемы однопоточного подхода
- •Многопоточное
- •Многопоточная архитектура
- •Квантование времени
- •Преимущества
- •Особенности многопоточности
- •Класс Thread
- •Использование класса Thread
- •Пример работы с Thread
- •Интерфейс Runnable
- •Использование интерфейса Runnable
- •Пример работы с Runnable
- •Управление потоками
- •Группы потоков
- •Создание групп потоков
- •Операции в группе потоков
- •Приоритеты потоков
- •Приоритеты потоков
- •Приоритеты потоков
- •Приоритеты потоков
- •Демон-потоки
- •Демон-группы потоков
- •Неконтролируемое совместное использование ресурсов
- •Неконтролируемое совместное использование ресурсов
- •Блокировки
- •Блокировки
- •Синхронизация
- •Характерные ошибки
- •Специальные методы класса Object
- •Особенности использования методов класса Object
- •Запрещенные действия над потоками
- •Прерывание потока
- •А если поток «спит»?
- •Пример кода объекта-посредника
- •Пример кода объекта-посредника
- •Отличия wait() и sleep()
- •Спасибо за внимание!
- •Дополнительные источники
Многопоточное
программирование
© Составление, Будаев Д.С., Гаврилов А.В., 2013
Лекция 7
УНЦ «Инфоком» Самара
2013
План лекции
Потоки инструкций и многопоточное программирование
Создание потоков и управление ими
Совместное использование ресурсов и блокировки
Взаимодействие между потоками
2
Проблемы однопоточного подхода
Монопольный захват задачей процессорного времени
Смешение логически несвязанных фрагментов кода
Попытка их разделения приводит к возникновению в программе новых систем и усложнению кода
3
Многопоточное
программирование
Последовательно выполняющиеся инструкции составляют поток
Потоки выполняются условно независимо
Потоки могут взаимодействовать друг с другом
В многоядерной |
поток |
монопольно |
одно ядроЭто не так |
4
Многопоточная архитектура
При наличии нескольких процессоров теоретически каждому можно выделить отдельную задачу
Что же делать, если используется вычислительная система с одним процессором?
5
Квантование времени
(Time-Slicing)
Время разделяется на интервалы (кванты времени)
Во время одного кванта обрабатывается один поток команд
Решение о выборе потока принимается до начала интервала
Переключения между потоками с высокой частотой
T1 |
T2 |
T3 |
T4 |
T3 |
T4 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Время
Иллюзия одновременности!
6
Преимущества
Одновременная работа нескольких приложений
Одновременное обслуживание нескольких запросов одним приложением
Одновременное обработка входящих данных от нескольких устройств
Более гибкое управление выполнением задач, возможность корректировки задачи
7
Особенности многопоточности
Простота выделения подзадач
Более медленное выполнение ?
Выигрыш в скорости выполнения при разделении задач по используемым ресурсам
Выигрыш в скорости выполнения на многоядерных системах
Недетерминизм при выполнении
8
Класс Thread
Поток выполнения представляется экземпляром класса Thread
Для создания потока выполнения можно
создать класс, наследующий Thread
переопределить метод run()
Для запуска потока используется метод start() у объекта класса-наследника
9
Использование класса Thread
Описание класса
public class <Имя класса> extends Thread { public void run() {
// Действия, выполняемые потоком
}
}
Запуск потока
<Имя класса> t = new <Имя класса>(); t.start(); //именно start(), а не run() !!!
10