
Лекции Java / 11. Многопоточное программирование. Общие принципы и реализация в Java.pptx
.pdf
Самарский государственный аэрокосмический университет имени академика С.П. Королёва
Лекция 11
Многопоточное программирование: общие принципы
иреализация в Java
©Составление, Гаврилов А.В., 2013
Самара
2013

План лекции
nМногопоточное программирование и его особенности
nПотоки и работа с ними
nГруппы потоков
nПриоритеты потоков
nДемон-потоки
nБлокировки и синхронизация
nНовые виды ошибок
nСовместная работа с полями и переменными
nМетоды класса Object
nПрерывание потоков
nВысокоуровневые средства
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
2 |

Проблемы однопоточного подхода
nМонопольный захват задачей процессорного времени
nСмешение логически несвязанных фрагментов кода
nПопытка их разделения приводит к возникновению в программе новых систем и усложнению кода
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
3 |

Многопоточное
программирование
nПоследовательно выполняющиеся инструкции составляют поток
nПотоки выполняются условно независимо
nПотоки могут взаимодействовать друг с другом
Это не так
n В многоядерной |
поток |
монопольно |
одно ядро |
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
4 |

Квантование времени
(Time-Slicing)
nВремя разделяется на интервалы (кванты времени)
nВо время одного кванта обрабатывается один поток команд
nРешение о выборе потока принимается до начала интервала
nПереключения между потоками с высокой частотой
T1 |
T2 |
T3 |
T4 |
T3 |
T4 |
Время
n Иллюзия одновременности!
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
5 |

Особенности
многопоточности
nПростота выделения подзадач
nБолее гибкое управление выполнением задач
nБолее медленное выполнение ?
nВыигрыш в скорости выполнения при разделении задач по используемым ресурсам
nВыигрыш в скорости выполнения на многоядерных системах
nНедетерминизм при выполнении
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
6 |

Использование класса Thread
n Описание класса
public class ИмяКласса extends Thread { public void run() {
// Действия, выполняемые потоком
}
}
n Запуск потока
ИмяКласса t = new ИмяКласса();
t.start(); // именно start(), а не run() !!!
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
7 |

Использование интерфейса
Runnable
n Описание класса
public class ИмяКласса implements Runnable { public void run() {
// Действия, выполняемые потоком
}
}
n Запуск потока
Runnable r = new ИмяКласса(); // Это ещё не поток
Thread t = new Thread(r); // А вот это уже поток t.start();
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
8 |

Особенности использования интерфейса Runnable
nВозможность создать класс, описывающий тело потока и наследующий от класса, отличного от
Thread
nОбъект вашего класса не является объектом потока
nНевозможно использовать напрямую методы класса Thread
nМожно получить ссылку на объект текущего потока с помощью статического метода currentThread() класса Thread
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
9 |

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