Java中线程分为两种类型:用户线程和守护线程。
通过Thread.setDaemon(false)设置为用户线程;
通过Thread.setDaemon(true)设置为守护线程;如果不设置属性,默认为用户线程。
用户线程和守护线程的区别:
1. 主线程结束后,用户线程还会继续运行,JVM 存活;主线程结束后,守护线程和JVM的状态由下面第2条确定。
2.如果没有用户线程,只有守护线程的话,那么JVM 就会结束。
守护线程:
定义:守护线程 -- 也称“服务线程”,在没有用户线程可服务时会自动离开;
优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务;
设置:通过setDaemon(true)来设置线程为“守护线程”;
实例: 垃圾回收线程就是一个经典的守护线程。当我们的程序中不再有任何运行的线程,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。
Class TestThread extends Thread { // 永真循环线程 public void run() { for(int i=0;;i++){ try { Thread.sleep(1000); } catch (InterruptedException ex) { } System.out.println(i); } } public static void main(String [] args){ TestThread test = new TestThread(); // 调试时可以设置为false,那么这个程序是个死循环,没有退出条件。 test.setDaemon(true); test.start(); System.out.println("isDaemon = " + test.isDaemon()); try { // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束 System.in.read(); } catch (IOException ex) { } } }
http://blog.csdn.net/xyls12345/article/details/26256693
相关推荐
true 则把该线程设置为守护线程,反之则为用户线程。 Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。 两者的区别: 唯一的区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务...
1)setDaemon(True): 当主线程退出时,后台线程随机退出; 2)setDaemon(False)(默认情况): 当主线程退出时,若前台线程还未结束,则等待所有线程结束,相当于在程序末尾加入join(). 实例: 例子描述:主线程调用giveures给出...
本文实例讲述了Python守护线程...(thread.setDaemon(True))就表示这个线程“不重要”。 如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用thread.setDaemon(False),设置daemon的值为false。新的子
守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为thread.setDaemon(True),要在thread.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行。...
ExecutorService exec=Executors.newFixedThreadPool(2); Thread1 th1 = new Thread1("CRTA");... th1.setDaemon(true); th1.setPriority(MIN_PRIORITY); th1.start(); Thread1 th2 = new Thread1("CRTB");
for username in open("username.txt","r"): ... gushi.setDaemon(True) 53 gushi.start() 54 lines = 5 55 for x in range(lines): 56 y = Crack(url,queue) 57 y.start() 58 threads.append(y)
这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对...(thread.setDaemon(True))就表示这个线程“不重要”。 如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用threa
我们都知道,python可以通过threading module来创建新的线程,然而在创建线程的线程(父线程)关闭之后,相应的子线程可能却没有关闭,这可能是因为代码中没有使用setDaemon(True)函数。 接下来,使用一个例子来...
t1.setDaemon(True) t1.start() 之后我发现用子线程去调用UI线程是行不通的,只能通过信号和槽来实现,于是 首先,定义一个类,让他实现PySide.QtCore.QObject类 class Data(PySide.QtCore.QObject): #定义信号 ...
子线程在主线程运行结束后,会继续执行完,如果给子线程设置为守护线程(setDaemon=True),主线程运行结束子线程即结束; 如果join()线程,那么主线程会等待子线程执行完再执行。 import threading import time def...
2 如果创建线程,并且设置了daemon为true,即thread.setDaemon(True), 则主线程执行完毕后自动退出,不会等待子线程的执行结果。而且随着主线程退出,子线程也消亡。 3 join方法的作用是阻塞,等待子线程结束,join...
t setDaemon true ; t start ; } HTTPSession内保存了Socket的引用 ">anoHTTPD是个很简单的http服务器 简单到只有一个java文件 主要原理是用ServerSocket接受请求 对每一个请求的Socket创建一个线程去处理...