后台线程(守护线程)

有一种线程,它是在后台运行的,它的任务是为其他的线程提供服务,这种线程被称为“后台线程”(Daemon Thread),又称为“守护线程”。

典型的后台线程是定时器”Timer"线程,他负责将固定的时间间隔发送给其他的线程。

后台线程经常用于任务结束时的善后处理。另外,后台线程的优先级要比其他的线程优先级低。

和后台线程相比,一般的线程称为“用户线程”。如果一个应用中只有后台线程在运行,JVM将退出该应用程序。

可以通过setDaemon(boolean d)来将一个普通的线程设置为后台线程。用方法isDaemon()可以用于测试特定的线程是否为后台线程。

package com.liujl.thread;

public class DaemonThread extends Thread{
    @Override
    public void run() {
        while(true){
            System.out.println("DaemonThread is running...");
        }
    };

    public static void main(String[] args) {
        DaemonThread dt=new DaemonThread();
    //    dt.setDaemon(true);
        dt.start();
    }
    /**
     * dt.setDaemon(true),设置了dt线程为守护线程,这时调用start();
     * 在dt这个线程执行一段时间后将会自动退出,这是因为线程调度程序在监测到只有
     * 一个后台线程在运行的时候,它就终止这个引用程序的运行。
     *
     * 读者可以把第13行的代码去掉,再次运行这个引用,此时这个应用程序将永无止境的运行下去。
     */
}

  

时间: 2024-10-23 17:51:27

后台线程(守护线程)的相关文章

java多线程总结二:后台线程(守护线程)

所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分.因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程.反过来说,只要有任何非后台线程(用户线程)还在运行,程序就不会终止.后台线程在不执行finally子句的情况下就会终止其run方法.后台线程创建的子线程也是后台线程. 下面是一个后台线程的示例: [java] view plaincopy <span style="font-size:16px;">

2.5 驻守后台:守护线程

package 第二章.守护线程; /** * Created by zzq on 2018/1/18. */public class 守护线程Test { public static class MyThread extends Thread{ private int i = 0; @Override public void run(){ super.run(); try{ while(true){ i++; System.out.println("i="+i); Thread.sl

线程----守护线程

守护线程是服务于用户线程或主线程的的,当用户线程或主线程结束时,守护线程自然结束. jvm 垃圾回收期就是一个守护线程. setDaemon(boolean on)   on为true是设置为守护线程 下面是一个列子: package com.test; public class B extends Thread { public static void main(String[] args) { Thread t1 = new MyCommon(); Thread t2 = new Threa

python开发线程:线程&amp;守护线程&amp;全局解释器锁

一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python.org/3/library/threading.html?highlight=threading# 二 开启线程的两种方式 #方式一 from threading import Thread import time def sayhi(name): time.sleep(2) print('%s

9 并发编程-(线程)-守护线程&amp;互斥锁

一 .守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 1.对主进程来说,运行完毕指的是主进程代码运行完毕 2.对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详细解释: 1.主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收), 然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束, 2.主线程在其他非守护线程运行完毕后才算运行完毕

54_并发编程-线程-守护线程

一.守护线程 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详解: 1.主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束 2.主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收).因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程

线程--守护线程、线程锁、信号量、事件、条件、定时器、队列、池(三)

守护线程 import timefrom threading import Threaddef func1(): while True: print('*'*10) time.sleep(1)def func2(): print('in func2') time.sleep(5) t = Thread(target=func1,)t.daemon = Truet.start()t2 = Thread(target=func2,)t2.start()t2.join() #加join后会等待func

Java中的守护线程和非守护线程(转载)

<什么是守护线程,什么是非守护线程> Java有两种Thread:“守护线程Daemon”(守护线程)与“用户线程User”(非守护线程). 用户线程:非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程,Java虚拟机在它所有非守护线程已经离开后自动离开. 守护线程:守护线程则是用来服务用户线程的,比如说GC线程.如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去.(操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制是构建在JVM

详解Java中的守护线程

线程分类 守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程,这是它的作用--而其他的线程只有一种,那就是用户线程.所以java里线程分2种: 用户线程:比如垃圾回收线程,就是最典型的守护线程 守护线程:就是应用程序里的自定义线程 用户线程举例 public class UserTest { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable