`

java 守护线程实践

    博客分类:
  • java
阅读更多
   最近工作不忙,研究了一下java线程方面的东西,对守护线程一直是很感兴趣的,就找了个示例练习了一下,了解了一些。
    所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程。反过来说,只要有任何非后台线程(用户线程)还在运行,程序就不会终止。后台线程在不执行finally子句的情况下就会终止其run方法。后台线程创建的子线程也是后台线程。
import java.util.concurrent.TimeUnit;

/**
 * 描述: 后台守护线程示例
 * 版权: Copyright (c) 2012 
 * 版本: 1.0 
 * 创建日期: 2012-7-3 
 * 创建时间: 上午09:57:27
 */
public class DaemonDemo implements Runnable{
	public void run()
	{
		try{
			while(true)
			{
				Thread.sleep(1000);
				System.out.println("#"+Thread.currentThread().getName());
			}
		}catch(InterruptedException e)
		{
			e.printStackTrace();
		}
		finally{
			System.out.println("finally!");
		}
	}
	public static void main(String []args)
	{
		for(int i= 0;i<10;i++)
		{
			Thread deamon = new Thread(new DaemonDemo());
			deamon.setDaemon(true);
			deamon.start();
		}
		System.out.println("All deamon started!");
		try{
			TimeUnit.MICROSECONDS.sleep(1000*5000);
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		System.out.println("Main exit!");
	}
}


   通过运行结果来看,子线程是受控于主线程的,子线程退出时,JVM强制终止了守护线程,但并非以异常方式结束的,连finally语句块也不执行,这样的话想要捕获守护线程退出的状态似乎增加了难度。


分享到:
评论

相关推荐

    java多线程的讲解和实战

    5. **守护线程(Daemon)**:守护线程是一种不会阻止程序退出的特殊线程,例如JVM的垃圾收集器就是守护线程。通过`setDaemon(true)`方法将线程设置为守护线程。 6. **线程池**:Java提供`ExecutorService`和`...

    java 多线程示例

    守护线程不会阻止程序的退出,如JVM的垃圾收集器就是守护线程。可以通过`setDaemon(true)`将线程设置为守护线程。 9. **线程池** Java的`ExecutorService`和`ThreadPoolExecutor`类提供了一种更高效的方式来管理...

    Java多线程练习题

    2.守护线程(Daemon Thread):后台运行的线程,当所有非守护线程结束时,守护线程也会自动结束。 六、线程池 Java提供ExecutorService和ThreadPoolExecutor来管理线程,可以避免频繁创建和销毁线程带来的开销,...

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

    Java中的`Thread.setDaemon(true)`方法可将线程设置为守护线程。通常,后台服务或日志记录线程可以设置为守护线程。 7. **线程同步与并发控制** Java提供了多种同步机制,如`synchronized`关键字、`java.util....

    java多线程编程

    守护线程通常用于后台服务,如垃圾收集器,当所有非守护线程结束时,程序才会终止。线程同步是解决线程间共享数据时可能出现的问题,如死锁、活锁和饥饿,Java提供了`synchronized`关键字、`wait()`、`notify()`和`...

    守护进程(java)

    在阅读"守护进程(java).txt"这个文件时,你可以期待了解更多关于如何在Java中创建和管理守护线程的具体示例和最佳实践,包括如何处理线程间通信、异常处理以及如何优雅地关闭守护线程等。这些知识将帮助你深入理解...

    JAVA多线程教材

    4. **线程优先级与守护线程**:Java线程有优先级之分,可以影响调度,但实际效果取决于操作系统。守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与...

    深入学习:Java多线程编程

    6. **线程优先级与守护线程**:线程的优先级可以影响其调度顺序,而守护线程则是在所有用户线程结束后才会停止运行的线程,如垃圾收集器。 7. **异常处理**:多线程环境下,如何正确处理和传播异常是另一个重要话题...

    Java多线程设计模式(带源码)

    10. 守护线程模式:用于执行后台服务,如垃圾回收线程就是典型的守护线程,当所有非守护线程结束时,守护线程也会自动终止。 通过阅读提供的"Java多线程设计模式详解.pdf"和"Java多线程设计模式上传文件",开发者...

    JAVA多线程学习内容

    此外,守护线程(Daemon Thread)是一种特殊类型的线程,它们在所有非守护线程结束时自动终止,常用于后台服务,如垃圾收集器。 总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个...

    java多线程笔记全手打

    通过`setDaemon(true)`将线程设置为守护线程,`isDaemon()`检查线程是否为守护线程。 八、异常处理 线程中的异常如果不捕获处理,将导致线程异常终止。`Thread.UncaughtExceptionHandler`接口用于定义线程未捕获...

    java多线程测试实例

    - 守护线程(Daemon Thread)是一种后台线程,当所有非守护线程结束时,程序退出,即使守护线程仍在运行。通过`setDaemon(true)`方法设置。 7. **线程池** - `ExecutorService`和`ThreadPoolExecutor`是Java并发...

    java多线程文件传输

    - **守护线程**:守护线程在所有非守护线程结束后自动终止,常用于后台服务。 8. **监控与调试** - **JMX(Java Management Extensions)**:用于管理和监控Java应用,可以获取线程信息、内存使用等。 - **...

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

    - 守护线程不阻止程序退出,当所有非守护线程结束时,JVM会自动停止守护线程。 6. **线程状态** - 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting...

    java 多线程

    守护线程不阻止程序退出,当所有非守护线程结束时,即使守护线程还在运行,JVM也会退出。 在学习Java多线程时,理解这些基本概念和机制至关重要。通过实践编写多线程程序,可以深入掌握线程的创建、管理、同步和...

    Java多线程编程核心技术_完整版_java_

    2. 守护线程与用户线程:守护线程不阻碍JVM退出,而用户线程则会阻止JVM退出。 八、中断与异常处理 1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. ...

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

    通过学习和实践这些Java多线程编程的知识点,开发者可以创建高效、健壮的多线程应用程序。提供的源程序文件可以作为学习和调试的实例,帮助你更好地理解和掌握这些概念。在实际开发中,理解并熟练运用这些技术,能...

    Java多线程编程全部源码

    6. **守护线程(Daemon Thread)**:用于为其他线程提供服务,当所有非守护线程结束时,程序会自动结束,即使仍有守护线程在运行。 7. **线程池**:通过`ExecutorService`和`ThreadPoolExecutor`管理线程,提高系统...

    java多线程控制的赛跑程序

    - 如果赛跑程序中包含后台服务,可能会用到守护线程。守护线程不阻碍程序的退出,即使它仍在运行。 7. **Join方法**: - 可能会用到`join()`方法,让当前线程等待另一个线程完成,例如等待所有选手完成比赛。 8....

    Java线程(第三版)

    线程优先级和守护线程也是Java线程中的一部分,`Thread`类提供了设置优先级的方法,高优先级的线程更有可能获得CPU执行时间。守护线程是一种特殊的线程,它不会阻止JVM的退出,除非所有的非守护线程都已结束。 书中...

Global site tag (gtag.js) - Google Analytics