Содержание
Потоки демона в 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:
- JVM не ожидает завершения работы какого-либо потока демона перед выходом.
- Поток демона обрабатывается иначе, чем пользовательский поток, когда JVM завершается , наконец, блоки не вызываются, стеки не разматываются, а JVM просто выходит.
Пример 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)):
|
1
2
3
4
5
6
|
Основной метод ввода
запустить метод ввода
В Метод запуска : currentThread ( ) isThread [ Тема — 0 , 5 , главная ]
В запустить метод . , Тема [ Тема — 0 , 5 , главная ]
В запустить метод . , Тема [ Тема — 0 , 5 , главная ]
Основной метод выхода
|
Когда поток демона — единственные потоки, работающие в программе — как вы видите здесь, JVM ends the program заканчивая нить.
Выход 2: (с 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
0.00 (0%) 0 votes







