n Каждый поток находится в группе
n Группы потоков образуют дерево, корнем служит начальная группа
n Поток не имеет доступа к информации о родительской группе
n Изменение параметров и состояния группы влияет на все входящие в нее потоки
Создание групп потоков
n Создание группы
//Без явного указания родительской группы
ThreadGroup group 1 = new ThreadGroup(" Group 1");
//С явным указанием родительской группы
ThreadGroup group2 = new ThreadGroup(group1, "Group2");
n Создание потока
// Без явного указания группы
MyThread t1 = new MyThread("Thread1");
// С явным указанием группы
MyThread t2 = new MyThread(group2, "Thread2");
Операции в группе потоков
n int activeCount ()
Возвращает оценку количества потоков
n int enumerate ( Thread [] list)
Копирует в массив активные потоки
n int activeGroupCount ()
Возвращает оценку количества подгрупп
n int enumerate ( ThreadGroup [] list)
Копирует в массив активные подгруппы
n void interrupt ()
Прерывает выполнение всех потоков в группе
Приоритеты потоков
n Приоритет – количественный показатель важности потока
n Недетерминированно воздействуют на системную политику упорядочивания потоков
n Базовый алгоритм программы не должен зависеть от схемы расстановки приоритетов потоков
n При задании значений приоритетов рекомендуется использовать константы
Приоритеты потоков
n Константы в классе Thread
MAX_PRIORITY MIN_PRIORITY NORM_PRIORITY
n Методы потока
int getPriority() void setPriority(int newPriority)
n Методы группы потоков
int getMaxPriority() void setMaxPriority(int priority)
Демон-потоки ( Daemons )
n Демон-потоки позволяют описывать фоновые процессы, которые нужны только для обслуживания основных потоков выполнения и не могут существовать без них
n Уничтожаются виртуальной машиной, если в группе не осталось не-демон потоков
n void setDaemon (boolean on) Устанавливает вид потока Вызывается до запуска потока
n boolean isDaemon () Возвращает вид потока: true – демон, false – обычный
Демон-группы потоков
n Демон-группа автоматически уничтожается при остановке последнего ее потока или уничтожении последней подгруппы потоков
n void setDaemon (boolean on) Устанавливает вид группы
n boolean isDaemon () Возвращает вид группы: true – демон, false – обычная
Вопрос 86 Работа с разделяемыми ресурсами. Блокировки. Механизмы синхронизации, типичные ошибки. 17-24. Лекция многопоточное программирование.
Неконтролируемое совместное использование ресурсов
n Недетерминизм программы
Конечный результат работы программы непредсказуем
n Некорректность работы программы
Возможность некорректной работы алгоритма, возникновения исключительных ситуаций
Блокировки
n Только один поток в один момент времени может установить блокировку на некоторый объект
n Попытка блокировки уже заблокированного объекта приводит к останову потока до момента разблокирования этого объекта
n Наличие блокировки не запрещает всех остальных действий с объектом
Блокировки
Синхронизация
n Синхронизированный блок
//Блокируется указанный объект
synchronized (ссылкаНаОбъект>) {
// Тело блока синхронизации
}
n Синхронизированный метод
//Блокируется объект-владелец метода
public synchronized void метод() {
// Тело метода
}
Новые виды ошибок
n Отсутствие синхронизации
n Необоснованная длительная блокировка объектов
n Взаимная блокировка (deadlock)
n Возникновение монопольных потоков
n Нерациональное назначение приоритетов
Дата: 2019-07-30, просмотров: 222.