Домой Учебники по Java и J2EE Что такое Daemon Thread в Java? Пример прилагается

Что такое Daemon Thread в Java? Пример прилагается

12003
0

Потоки демона в Java подобны поставщикам услуг для других потоков или объектов, работающих в том же процессе, что и поток демона. Потоки демона используются для фоновых задач поддержки и нужны только во время выполнения обычных потоков.

Если нормальные потоки не запущены, а остальные потоки являются потоками демонов, интерпретатор завершает работу.

Когда создается новый поток, он наследует статус демона своего родителя. Обычные потоки и потоки демонов отличаются тем, что происходит при выходе. Когда JVM останавливает все оставшиеся потоки демонов, они прекращают свою работу: в конце концов блоки не выполняются, стеки не разматываются — JVM просто завершается. По этой причине потоки демонов следует использовать с осторожностью, и их опасно использовать для задач, которые могут выполнять любые операции ввода-вывода.

setDaemon (true / false)?

Этот метод используется, чтобы указать, что поток является потоком демона.

public boolean isDaemon ()?

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

Поток демона в Java — это поток, который работает в фоновом режиме и в основном создается JVM для выполнения фоновых задач, таких как сборка мусора и другие домашние задачи.

Указывает на Примечание:

Любой поток, созданный основным потоком , который выполняет основной метод в Java, по умолчанию не является демоном, поскольку поток наследует свою природу демона от потока , который его создает, т.е. родительский поток, а поскольку основной поток является потоком, не являющимся демоном, любой другой поток, созданный из него, будет оставаться не-демоном до тех пор, пока он явно не станет демоном, вызвав setDaemon(true) ,

Thread.setDaemon(true) создает демон Thread, но его можно вызвать только перед запуском Thread в Java. Он выдаст исключение IllegalThreadStateException, если соответствующий поток уже запущен и работает.

Разница между потоками Daemon и Non Daemon в Java:

  1. JVM не ожидает завершения работы какого-либо потока демона перед выходом.
  2. Поток демона обрабатывается иначе, чем пользовательский поток, когда JVM завершается , наконец, блоки не вызываются, стеки не разматываются, а JVM просто выходит.
ЧИТАТЬ ТАКЖЕ:  Понимание аннотаций Java - учебник по Java @annotations

Пример Java :

CrunchifyDaemonThread.java

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
пакет ком . crunchify. учебные пособия ;
/ **
* @author Crunchify.com
* /
общественности учебный класс CrunchifyDaemonThread продолжается Нить {
общественности статический недействительным main ( Строка [ ] аргументы ) {
Система. вне. println ( «Ввод основного метода» ) ;
CrunchifyDaemonThread T знак равно новый CrunchifyDaemonThread ( ) ;
т . setDaemon ( true ) ;
// Когда ложно (т.е. когда это пользовательский поток), рабочий поток
// продолжает работать.
// Когда истина (то есть, когда это поток демона), рабочий поток
// завершается, когда основной поток завершается.
т . начало ( ) ;
пытаться {
Thread. сон ( 3000 ) ;
} ловить ( InterruptedException х ) {
}
Система. вне. println ( «Выход из основного метода» ) ;
}
общественности недействительным запустить ( ) {
Система. вне. println ( Run Method Entry ) ;
пытаться {
Система. вне. println ( «В рабочем методе: currentThread () is»
+ Thread. currentThread ( ) ) ;
в то время как ( правда ) {
пытаться {
Thread. сон ( 1000 ) ;
} ловить ( InterruptedException х ) {
}
Система. вне. println ( «В рабочем методе ..» + Thread. currentThread ( ) ) ;
}
} в конце концов {
Система. вне. println ( «Run Method Exit» ) ;
}
}
}

Выход 1: (с t.setDaemon (true)):

с t.setDaemon (верно);

1
2
3
4
5
6
Основной метод ввода
запустить метод ввода
В Метод запуска : currentThread ( ) isThread [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
Основной метод выхода

Когда поток демона — единственные потоки, работающие в программе — как вы видите здесь, JVM ends the program заканчивая нить.

Выход 2: (с t.setDaemon (false)):

с t.setDaemon (false);

1
2
3
4
5
6
7
8
9
10
11
12
13
Основной метод ввода
запустить метод ввода
В Метод запуска : currentThread ( ) isThread [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
Основной метод выхода
В запустить метод . , Тема [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
В запустить метод . , Тема [ Тема0 , 5 , главная ]
, , ,
, , ,
, , ,

Как вы видите здесь program doesn't exit когда это не поток демона.

Ссылка: stackoverflow

Что такое Daemon Thread в Java? Пример прилагается

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

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