`

Daemon的使用

阅读更多
后台线程是程序在运行的时候在后台提供一种通用服务的线程,当所有的非后台线程结束时,程序也就终止,同时会杀死所有的后台线程。下面的例子很好的说明这一点:
public class SimpleDaemons implements Runnable{
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true)
		{

			try {
				TimeUnit.MILLISECONDS.sleep(100);
				System.out.println(Thread.currentThread()+" "+this);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	
	public static void main(String[] args)
	{
		for(int i=0;i<10;i++)
		{
			Thread deamon=new Thread(new SimpleDaemons());
			deamon.setDaemon(true);
 //注意这个地方一定要放在线程启动之前设置,否则会抛出异常java.lang.IllegalThreadStateException,并且不会起作用

//即便是这里启动了10个线程,且每个线程都是一个死循环,但是这10个都是后台线程,主线程的运行时间却很短,所以后台线程很快也会结束,不会一直执行
			deamon.start();
		}
		
		System.out.println("SimpleDaemons.main()");
		try {
			TimeUnit.MILLISECONDS.sleep(175);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

=========================================
如果一个线程被设置成了后台模式,这个线程派生出许多子线程,那么这些子线程也是后台线程,即便它们没有显示地设置成后台模式
public class DaemonSpawn implements Runnable{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true)
		{
			Thread.yield();
		}
	}

}
===========================
public class Daemon implements Runnable{
         //这里派生出10个子线程
	private Thread[] t=new Thread[10];
	
	@Override
	public void run() {//每次启动主线程时 10个子线程也将启动
		// TODO Auto-generated method stub
		for(int i=0;i<10;i++)
		{
			t[i]=new Thread(new DaemonSpawn());
			t[i].start();
			System.out.println("DaemonSpawn "+i+" started!");
		}
		
		for(int i=0;i<t.length;i++)
		{     

			System.out.println("t["+i+"].isDaemon="+t[i].isDaemon());//判断县城是否为后台线程
		}
		
		while(true)
		{
			Thread.yield();
		}
	}

}



================
public class Daemons {

	public static void main(String[] args)
	{
	
		Thread d=new Thread(new Daemon());
		d.setDaemon(true);
		d.start();
		System.out.println("d.isDaemon()="+d.isDaemon());
		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
-----------执行结果如下:
d.isDaemon()=true
DaemonSpawn 0 started!
DaemonSpawn 1 started!
DaemonSpawn 2 started!
DaemonSpawn 3 started!
DaemonSpawn 4 started!
DaemonSpawn 5 started!
DaemonSpawn 6 started!
DaemonSpawn 7 started!
DaemonSpawn 8 started!
DaemonSpawn 9 started!
t[0].isDaemon=true
t[1].isDaemon=true
t[2].isDaemon=true
t[3].isDaemon=true
t[4].isDaemon=true
t[5].isDaemon=true
t[6].isDaemon=true
t[7].isDaemon=true
t[8].isDaemon=true
t[9].isDaemon=true



==========================
当主线程结束时,后台线程会立即结束,甚至可能不会执行finally字句的内容
class ADaemon implements Runnable{
   public void run(){
      try{
      print("XXXXXX");
      TimeUnit.SECONDS.sleep(1);
     }catch(Exception ex){
     }finally{
     print("finally...");
     }
   }
}
====在main函数里面直接测试这个线程,并设置为后台线程就不会执行finally块的语句



分享到:
评论

相关推荐

    虚拟光驱DAEMON Tools的安装和简单使用

    "虚拟光驱DAEMON Tools的安装和简单使用" 虚拟光驱DAEMON Tools是一款功能强大且广泛使用的虚拟光驱软件,能够模拟真实的光驱设备,支持多种光盘镜像格式,包括ISO、BIN、CUE、MDS、NRG等。下面将详细介绍DAEMON ...

    Daemon_Tools Daemon_Tools

    Daemon_Tools Daemon_Tools Daemon_Tools Daemon_Tools

    虚拟光驱 daemon_tools_347cn_eric

    虚拟光驱 daemon_tools_347cn_eric虚拟光驱 daemon_tools_347cn_eric虚拟光驱 daemon_tools_347cn_eric虚拟光驱 daemon_tools_347cn_eric虚拟光驱 daemon_tools_347cn_eric虚拟光驱 daemon_tools_347cn_eric虚拟光驱...

    daemon 程序例子daemon 程序例子

    daemon 程序例子daemon 程序例子daemon 程序例子

    Daemon Tools v4.03 V4.03HE 汉化版

    Daemon Tools v4.03 V4.03HE 汉化版,相信经常使用虚拟光驱的人都应该记得,这是当年极其经典的一个版本。 现在的虚拟光驱越做越大,功能也越来越多,最新的版本Daemon Tools 安装后要占用硬盘50多M,然尔对一般的...

    虚拟光驱Daemon Tools使用方法.docx

    虚拟光驱Daemon Tools使用方法.docx

    commons daemon在windows操作系统上的使用方法

    commons daemon在windows操作系统上的具体使用方法,带有jar包。

    daemontool4.11中文完美版daemontool4.11中文完美版

    daemontool4.11中文完美版daemontool4.11中文完美版daemontool4.11中文完美版

    DaemonTools4.09 虚拟光驱

    “学会与别人分享自己的快乐”——虚拟光驱软件,DaemonTools4.09 ,经测试 Window Server 2008可用,win7 还是不能用~无任何插件及不良信息,放心使用!

    daemon.rar daemon.rar

    daemon.rar 虚拟光驱,安装iso文件的好东西

    Daemon Tools 3.46 简体中文版.rar

    Daemon Tools 3.46 简体中文版.rar 内有Daemon Tools 3.46 简体中文版.rar; daemon.log

    commons-daemon-1.0.13-API文档-中文版.zip

    赠送jar包:commons-daemon-1.0.13.jar; 赠送原API文档:commons-daemon-1.0.13-javadoc.jar; 赠送源代码:commons-daemon-1.0.13-sources.jar; 赠送Maven依赖信息文件:commons-daemon-1.0.13.pom; 包含翻译后...

    daemon344光驱模拟器

    daemon344光驱模拟器

    虚拟光驱专业版 DAEMON Tools PRO 8.3.0.0742 中文多语免费版.zip

    使用DAEMON Tools Pro Advanced您可以创建32个SCSI虚拟设备,4个IDE虚拟光驱。高级模拟只支持SCSI和IDE。 DAEMON Tools PRO 高级功能加载镜像 DAEMON Tools Pro Advanced 加载 *.mdx, *.mds/*.mdf, *.iso, *.b5t, *...

    DAEMON Tools Pro 4.41.0314.0232真正完美破解版 32bit&64bit;

    1、鼠标右键,以管理员身份运行包里的setup.exe,安装Daemon Tools Pro,选择Advanced Edition,使用许可选择trial license 2、如果安装程序要求重启电脑,重启电脑;重启后, Ctrl+Shift+Esc运行任务管理器,杀...

    daemon

    虚拟光驱daemon

    DAEMON Tools 3.47 中文版

    DAEMON Tools Lite 可以制作简单光盘映像文件和模拟 CD/DVD 光驱的最流行软件产品 功能 加载 *.mdx, *.mds/*.mdf, *.iso, *.b5t, *.b6t, *.bwt, *.ccd, *.cdi, *.bin/*.cue, *.ape/*.cue, *.flac/*.cue, *.nrg, ...

    dlt-daemon:诊断日志和跟踪

    诊断日志和跟踪构建和测试状态: 警报: 代码质量:诊断日志和跟踪欢迎使用GENIVI诊断日志和跟踪(DLT)。 如果您熟悉DLT并想了解新功能,请查看。 DLT的新手? 伟大的! 欢迎上车。 我们为您准备了一个简短的,以及...

    DaemonTool虚拟光驱

    Daemon Tools现在同时支持32位和64位操作系统。 一个不错的虚拟光驱工具,支持Win9x/win2k,支持ps,支持加密光盘,装完不需启动即可用。是一个先进的模拟备份并且合并保护盘的软件,可以备份SafeDisc保护的软件,...

    在Linux下用QT开发Daemon程序.pdf

    Linux 下使用 QT 开发 Daemon 程序 本文将介绍如何使用 QT 框架在 Linux 系统下开发 Daemon 程序。Daemon 程序是一种特殊的进程,它运行于后台,不受终端控制。使用 QT 框架可以方便地开发 Daemon 程序。 首先,让...

Global site tag (gtag.js) - Google Analytics