最近工作不忙,研究了一下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语句块也不执行,这样的话想要捕获守护线程退出的状态似乎增加了难度。
分享到:
相关推荐
5. **守护线程(Daemon)**:守护线程是一种不会阻止程序退出的特殊线程,例如JVM的垃圾收集器就是守护线程。通过`setDaemon(true)`方法将线程设置为守护线程。 6. **线程池**:Java提供`ExecutorService`和`...
守护线程不会阻止程序的退出,如JVM的垃圾收集器就是守护线程。可以通过`setDaemon(true)`将线程设置为守护线程。 9. **线程池** Java的`ExecutorService`和`ThreadPoolExecutor`类提供了一种更高效的方式来管理...
2. 守护线程与用户线程:守护线程不阻碍JVM退出,而用户线程则会阻止JVM退出。 八、中断与异常处理 1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. ...
守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护线程也会随之结束,通常用于后台服务。 总结: Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步...
2.守护线程(Daemon Thread):后台运行的线程,当所有非守护线程结束时,守护线程也会自动结束。 六、线程池 Java提供ExecutorService和ThreadPoolExecutor来管理线程,可以避免频繁创建和销毁线程带来的开销,...
Java中的`Thread.setDaemon(true)`方法可将线程设置为守护线程。通常,后台服务或日志记录线程可以设置为守护线程。 7. **线程同步与并发控制** Java提供了多种同步机制,如`synchronized`关键字、`java.util....
守护线程通常用于后台服务,如垃圾收集器,当所有非守护线程结束时,程序才会终止。线程同步是解决线程间共享数据时可能出现的问题,如死锁、活锁和饥饿,Java提供了`synchronized`关键字、`wait()`、`notify()`和`...
在阅读"守护进程(java).txt"这个文件时,你可以期待了解更多关于如何在Java中创建和管理守护线程的具体示例和最佳实践,包括如何处理线程间通信、异常处理以及如何优雅地关闭守护线程等。这些知识将帮助你深入理解...
4. **线程优先级与守护线程**:Java线程有优先级之分,可以影响调度,但实际效果取决于操作系统。守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与...
6. **线程优先级与守护线程**:线程的优先级可以影响其调度顺序,而守护线程则是在所有用户线程结束后才会停止运行的线程,如垃圾收集器。 7. **异常处理**:多线程环境下,如何正确处理和传播异常是另一个重要话题...
10. 守护线程模式:用于执行后台服务,如垃圾回收线程就是典型的守护线程,当所有非守护线程结束时,守护线程也会自动终止。 通过阅读提供的"Java多线程设计模式详解.pdf"和"Java多线程设计模式上传文件",开发者...
此外,守护线程(Daemon Thread)是一种特殊类型的线程,它们在所有非守护线程结束时自动终止,常用于后台服务,如垃圾收集器。 总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个...
通过`setDaemon(true)`将线程设置为守护线程,`isDaemon()`检查线程是否为守护线程。 八、异常处理 线程中的异常如果不捕获处理,将导致线程异常终止。`Thread.UncaughtExceptionHandler`接口用于定义线程未捕获...
- 守护线程(Daemon Thread)是一种后台线程,当所有非守护线程结束时,程序退出,即使守护线程仍在运行。通过`setDaemon(true)`方法设置。 7. **线程池** - `ExecutorService`和`ThreadPoolExecutor`是Java并发...
- **守护线程**:守护线程在所有非守护线程结束后自动终止,常用于后台服务。 8. **监控与调试** - **JMX(Java Management Extensions)**:用于管理和监控Java应用,可以获取线程信息、内存使用等。 - **...
- 守护线程不阻止程序退出,当所有非守护线程结束时,JVM会自动停止守护线程。 6. **线程状态** - 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting...
守护线程不阻止程序退出,当所有非守护线程结束时,即使守护线程还在运行,JVM也会退出。 在学习Java多线程时,理解这些基本概念和机制至关重要。通过实践编写多线程程序,可以深入掌握线程的创建、管理、同步和...
通过学习和实践这些Java多线程编程的知识点,开发者可以创建高效、健壮的多线程应用程序。提供的源程序文件可以作为学习和调试的实例,帮助你更好地理解和掌握这些概念。在实际开发中,理解并熟练运用这些技术,能...
6. **守护线程(Daemon Thread)**:用于为其他线程提供服务,当所有非守护线程结束时,程序会自动结束,即使仍有守护线程在运行。 7. **线程池**:通过`ExecutorService`和`ThreadPoolExecutor`管理线程,提高系统...