Потоки-демоны в Java
Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой частью программы. Если какой-либо процесс может выполняться на фоне работы основных потоков выполнения и его деятельность заключается в обслуживании основных потоков приложения, то такой процесс может быть запущен как поток-демон. С помощью метода setDaemon(boolean value), вызванного вновь созданным потоком до его запуска, можно определить поток-демон. Метод boolean isDaemon() позволяет определить, является ли указанный поток демоном или нет.
/* пример # 6 : запуск и выполнение потока-демона: DemoDaemonThread.java */
package chapt14;
class T extends Thread {
public void run() {
try {
if (isDaemon()){
System.out.println("старт потока-демона");
sleep(10000); // заменить параметр на 1
} else {
System.out.println("старт обычного потока");
}
} catch (InterruptedException e) {
System.err.print("Error" + e);
} finally {
if (!isDaemon())
System.out.println(
"завершение обычного потока");
else
System.out.println(
"завершение потока-демона");
}
}
}
package chapt14;
public class DemoDaemonThread {
public static void main(String[] args) {
T usual = new T();
T daemon = new T();
daemon.setDaemon(true);
daemon.start();
usual.start();
System.out.println(
"последний оператор main");
}
}
В результате компиляции и запуска, возможно, будет выведено:
последний оператор main
старт потока-демона
старт обычного потока
завершение обычного потока
Поток-демон (из-за вызова метода sleep(10000)) не успел завершить выполнение своего кода до завершения основного потока приложения, связанного с методом main(). Базовое свойство потоков-демонов заключается в возможности основного потока приложения завершить выполнение потока-демона (в отличие от обычных потоков) с окончанием кода метода main(), не обращая внимания на то, что поток-демон еще работает. Если уменьшать время задержки потока-демона, то он может успеть завершить свое выполнение до окончания работы основного потока.
Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.
Было бы круто, если синтаксис подсвечивался более подробнее и код не растягивался. 🙂 Добра!