Группы потоков ( ThreadGroup )
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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, просмотров: 194.