Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_6.ppt
Скачиваний:
86
Добавлен:
16.03.2015
Размер:
964.61 Кб
Скачать

Использование интерфейса

Runnable

11 • Запуск:

Runnable r = new MyThread(); Thread t = new Thread(r); t.start();

Подчеркнем, что Runnable не является полной заменой классу Thread, поскольку создание и запуск самого потока исполнения возможно только через метод Thread.start()

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Управление потоками

12 void start()

Запускает выполнение потока

void stop()

Прекращает выполнение потока

void suspend()

Приостанавливает выполнение потока

void resume()

Возобновляет выполнение потока

static void sleep(long millis)

Останавливает выполнение потока как минимум на millis миллисекунд

static void yield()

Приостанавливает выполнение потока, предоставляет возможность выполнять другие потоки

void join()

Ожидает завершения указанного потока

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Нерекомендуемые действия над

потоками

13 Thread.suspend()

увеличивают количество взаимных блокировок

Thread.resume()

увеличивают количество взаимных блокировок

Thread.stop()

использование приводит к возникновению поврежденных объектов

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Группы потоков

14• Каждый поток находится в группе

Группа указывается при создании потока

Если группа не была указана, то поток помещается в ту же группу, где находится поток, породивший его

Группы потоков образуют дерево, корнем служит начальная группа

Поток не имеет доступа к информации о родительской группе

Изменение параметров и состояния группы влияет на все входящие в нее потоки

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Группы потоков

15 Создание группы:

//Без явного указания родительской группы

ThreadGroup group1 = new ThreadGroup("Group1");

//С явным указанием родительской группы

ThreadGroup group2 = new ThreadGroup(group1,

"Group2");

Создание потока:

//Без явного указания группы MyThread t = new MyThread("Thread1"); //С явным указанием группы

MyThread t = new MyThread(group2, "Thread2");

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Операции в группе потоков

16 int activeCount()

Возвращает приблизительное количество действующих (активных) потоков группы, включая и те потоки, которые принадлежат вложенным группам. Количество нельзя считать точным, т.к. в момент выполнения метода оно может измениться – одни потоки «умирают», другие – создаются

int enumerate(Thread[] list)

Заполняет массив list ссылками на объекты активных потоков группы и возвращает количество сохраненных ссылок. Также учитываются потоки, относящиеся ко всем вложенным группам

int activeGroupCount()

Возвращает количество групп, включая вложенные

int enumerate(ThreadGroup[] list)

Заполняет массив list ссылками на объекты вложенных групп потоков

void interrupt()

Прерывает выполнение всех потоков в группе

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Приоритеты потоков

17Приоритет – количественный показатель важности потока

Недетерминированно воздействует на системную политику упорядочивания потоков

Базовый алгоритм не должен зависеть от схемы расстановки приоритетов потоков

В Java потокам можно назначать приоритеты

Для этого в классе Thread существуют методы getPriority() и setPriority(), а также объявлены три

Константы:

static int MAX_PRIORITY static int MIN_PRIORITY static int NORM_PRIORITY

Их значения описывают максимальное, минимальное и нормальное (по умолчанию) значения приоритета

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Приоритеты потоков

18 Методы потока

final int getPriority() – возвращает ранее заданное значение приоритета выполнения для текущего потока

final void setPriority(int newPriority)

устанавливает приоритет выполнения для текущего потока

Методы группы потоков

final int getMaxPriority() – возвращает ранее заданное значение верхней границы приоритетов выполнения для текущей группы потоков

final void setMaxPriority(int maxPri)

устанавливает верхнюю границу приоритетов выполнения для текущей группы потоков

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Демон-потоки

19Демон-потоки позволяют описывать фоновые процессы, которые нужны только для обслуживания основных потоков выполнения и не могут существовать без них

Уничтожаются виртуальной машиной, если в группе не осталось не-демон потоков

Пример демон-потока – сборщик мусора

void setDaemon(boolean on) устанавливает вид потока. Вызывается до запуска потока

boolean isDaemon() – возвращает вид потока: true – демон, false – обычный

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Демон-группы потоков

20Демон-группа автоматически уничтожаются при останове последнего ее потока или уничтожении последней подгруппы потоков

void setDaemon(boolean on) устанавливает вид группы

boolean isDaemon() возвращает вид группы: true – демон, false – обычная

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java