`
endual
  • 浏览: 3557090 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java多线程编程系列-基础3-线程Daemon线程的理解

    博客分类:
  • java
 
阅读更多

java多线程中,有一种特殊的线程叫做守护线程,关键词是Deamon。

我们在平时的书上都有介绍过,但是很少有用代码来讲的。我们往往记住的是:

守护线程是一般是用于辅助的,提供一些后台处理的理想方法,他们只是在支持其他非守护线程的时候才是需要的。

 

理解的深一点的,可以这么讲,守护线程的生命是和mian关联在一起的,如果man方法用完了,主线程死掉了,那么

守护线程就会陪着去送命,也会死掉的。而如果不是守护线程的话是不会这样的。

下面我们来看下代码的吧:

 

首先创建一个线程.守护线程并不是在创建线程的时候指定的,这其实和设定线程的名字是一样的,要再线程开始的去指定的。

 

 

package endual;

public class Daemon extends Thread{

	public void run () {
		
		System.out.println("entering run()");
		
		try {
			System.out.println("in run() - currentThread()=" + 
					Thread.currentThread());
			
			while (true) {
				try {
					Thread.sleep(500) ;
				} catch (Exception e) {
					// TODO: handle exception
				}
				System.out.println("in run()--  woke up again");
			}
			
			
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			System.out.println("leanving run()");
		}
		
	}
	
}

 

 

main的测试类(这个时候,不是守护线程)

package endual;

public class MainApp {

    /**
     * 标记为守护的线程将以全新的方式终止。守护线程用于后台的支持任务,而且仅仅在普通的,非守护线程
     * 仍然需要运行的时候才需要的。当VM检测仅仅剩下一个守护线程的时候,就会退出的。如果非守护线程仍然还
     * 存活着,VM就不会退出的,守护线程提供了一种管理某些后台处理的理想的方法,他们只是在支持其他非守护线程
     * 时才需要的
     * @param args
     */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("enter main()");
		Daemon de = new Daemon() ;
		//de.setDaemon(true) ; //设置成为了daemon线程,设置成为守护线程
		de.start() ;
		
		try {
			Thread.sleep(3000) ;
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		System.out.println("leaving main(0");
	}

}

 

结果是:

enter main()
entering run()
in run() - currentThread()=Thread[Thread-0,5,main]
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
leaving main(0
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
 

当main方法用完以后也就是主线线程死掉了以后,这个线程还是在运行中的。

-----------------------------------------------------------------------------------设定守护线程

 

而如果将线程设定为守护线程的话,情况就不一样的

 

package endual;

public class MainApp {

    /**
     * 标记为守护的线程将以全新的方式终止。守护线程用于后台的支持任务,而且仅仅在普通的,非守护线程
     * 仍然需要运行的时候才需要的。当VM检测仅仅剩下一个守护线程的时候,就会退出的。如果非守护线程仍然还
     * 存活着,VM就不会退出的,守护线程提供了一种管理某些后台处理的理想的方法,他们只是在支持其他非守护线程
     * 时才需要的
     * @param args
     */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("enter main()");
		Daemon de = new Daemon() ;
		de.setDaemon(true) ; //设置成为了daemon线程,设置成为守护线程
		de.start() ;
		
		try {
			Thread.sleep(3000) ;
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		System.out.println("leaving main(0");
	}

}
 

测试的结果是

 

 

enter main()
entering run()
in run() - currentThread()=Thread[Thread-0,5,main]
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
in run()--  woke up again
leaving main(0
in run()--  woke up again

 结果就是当main方法死掉以后,守护线程马上就死掉了的

 

分享到:
评论
1 楼 endual 2012-02-21  
守护线程可能非常有用,但是要小心确保其他线程所有的非守护线程消亡时,不会由于他的终止来带来危害

相关推荐

    JAVA多线程编程详解-详细操作例子

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。 1. **继承Thread类*...

    【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip

    在Java中,`join()`、`daemon`线程以及同步机制是多线程编程中的重要概念,对于理解和编写高效的并发代码至关重要。 首先,我们来讨论`join()`方法。在多线程环境中,有时候我们需要确保一个线程在执行完它的任务后...

    JAVA多线程编程详解-详细操作例子.doc

    总结,Java 多线程编程涉及到线程的创建、状态转换、同步、通信以及线程池的使用等多个方面,理解和掌握这些知识点对于编写高效、安全的多线程程序至关重要。通过合理运用多线程技术,可以提升程序的并发性能,优化...

    《Java多线程编程实例》随书源码

    《Java多线程编程实例》这本书深入浅出地探讨了Java中的多线程编程,通过丰富的实例帮助读者理解和掌握这一复杂主题。随书源码提供了实际操作的机会,以便读者能够亲手实践书中的示例,加深理解。 1. **线程创建...

    java多线程编程

    以上只是Java多线程编程的一部分基础知识,实际开发中还需要考虑线程的性能优化、线程安全问题以及如何优雅地关闭线程等复杂情况。深入理解并熟练掌握这些概念对于编写高效、稳定的多线程程序至关重要。

    java多线程编程实例 (源程序)

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程编程的...

    【JAVA多线程】多线程编程核心技术学习资料

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的...通过阅读这本书,开发者可以深入理解Java多线程编程的核心概念,提升自己的编程能力,为应对复杂并发场景打下坚实基础。

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程实战精讲-带你一次搞明白Java多线程高并发

    本文将深入探讨Java多线程的相关知识点,帮助你全面理解并掌握这一核心概念。 1. **线程基础** - **线程定义**:线程是操作系统分配CPU时间的基本单位,每个进程至少包含一个线程。 - **线程创建**:Java提供了两...

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...

    java多线程编程总结

    然而,随着Java5及后续版本的发布,Java引入了一系列强大的多线程特性和工具,极大地增强了多线程编程的能力。 #### 二、Java多线程的核心概念 ##### 1. 进程与线程 - **进程**:一个内存中运行的应用程序,每个...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    在Java编程中,多线程是并发处理任务的关键技术,它允许程序同时执行多个不同的任务。本篇文章将深入探讨如何实现线程的协同、停止、暂停以及继续等操作,这些都是多线程编程中的核心概念。 1. **线程的协同(协作...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java多线程编程详解

    Java多线程编程是Java平台中的重要特性,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类...这些文档将帮助你更好地理解和实践Java多线程编程。

    Java多线程编程全部源码

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。这个资源包含的"SimpleThread"源码很可能是对...通过学习和分析这个源码,你可以深入理解Java多线程编程的核心概念和实践技巧。

    Java多线程编程精解

    【Java多线程编程精解】 Java语言的多线程特性使得开发者可以在同一个程序中同时运行多个线程,实现并发处理,从而提高程序的效率和响应性。在Java中,多线程编程主要涉及到以下几个核心知识点: 1. **线程与线程...

    Java多线程编程实例全书随书代码.rar

    《Java多线程编程实例全书》是一本深入探讨Java多线程编程的书籍,它提供了丰富的实例,帮助读者理解并掌握多线程的核心概念和技术。尽管这本书可能相对较老,但其中涉及的知识点仍然是Java开发中不可或缺的部分,...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java 多线程编程详解

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程的实现主要依赖于`Thread`类和`Runnable`接口。下面我们将深入探讨这个领域的关键知识点...

Global site tag (gtag.js) - Google Analytics