1.所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程
2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread 在运行,则虚拟机退出。
虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemon threads,JVM会使得这个threads停止,JVM也停下
如果此时正在运行的其他threads有Non-daemon threads,那么必须等所有的Non daemon线程结束了,JVM才会停下来
4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon线程
默认产生的线程全部是Non-daemon线程
class A implements Runnable{
public void run(){
for(;;){
System.out.println("Thread A run");
}
}
public static void main(String[] args){
System.out.println("Thread main started!");
try{
(new Thread(new A())).start();
} catch (Exception e){
}
System.out.println("Thread main ended!");
}
};
会一直跑下去,因为main进程结束了,但 A 进程还没有结束,虚拟机不能退出,
class A implements Runnable{
public void run(){
for(;;){
System.out.println("Thread A run");
}
}
public static void main(String[] args){
System.out.println("Thread main started!");
try{
Thread a = new Thread(new A());
a.setDaemon(true);
a.start();
} catch(Exception e){
}
System.out.println("Thread main ended!");
}
};
main 线程一退出,虚拟机就退出了,因为剩下在跑的 a 线程是守护线程,虚拟机不管它的死活的,直接退出了。
分享到:
相关推荐
java中的daemon thread java中有两种类型的thread,user threads 和 daemon threads。 User threads是高优先级的thread,JVM将会等待所有的User Threads运行完毕之后才会结束运行。 daemon threads是低优先级的...
Java 的守护线程什么是Java的守护线程( Daemon Thread )?守护线程的区别?守护线程的作用?守护线程如何创建?守护线程如何判断?守护线程使用的注意事项总结 什么是Java的守护线程( Daemon Thread )? Java 提供...
6. **守护线程(Daemon Thread)** - 守护线程不阻碍程序退出,当所有非守护线程结束时,程序会退出,即使仍有守护线程运行。 7. **线程池** - 使用`ExecutorService`和`ThreadPoolExecutor`管理线程,可以有效...
- **守护线程(Daemon Thread)**:默认情况下,主线程是非守护线程。当所有非守护线程结束后,JVM才会退出。守护线程是为了服务其他线程而存在的,如垃圾收集器。设置线程为守护线程的方法是`setDaemon(true)`,...
ThreadDaemon.class
ThreadDaemon.java
在这段代码中,`daemonThread`被设置为守护线程,当其他非守护线程结束时,JVM会继续运行该线程直到其完成任务。 守护线程通常用于执行一些后台任务,如资源清理、日志记录、定时任务等。由于它们在所有非守护线程...
守护线程(Daemon Thread)在所有非守护线程结束后自动终止,此时,即使守护线程被中断,也不会有任何效果,因为整个Java虚拟机即将关闭。 10. **中断的局限性** 中断机制并不适用于所有情况,例如,如果线程被...
守护线程(Daemon Thread)是一种特殊的线程,当所有非守护线程结束时,程序会退出,即使还有守护线程在运行。通过调用setDaemon(true)方法可将线程设置为守护线程。 六、线程中断 1. interrupt()方法:用于中断...
daemon = threading.Thread(target=daemon_thread, daemon=True) daemon.start() # 主线程其他代码 ``` 在这个例子中,即使主线程结束,守护线程仍然会继续运行。 6. **线程状态信息** Python的`threading`模块...
在实际应用中,我们还需要考虑线程优先级、守护线程(Daemon Thread)以及线程组等特性。线程优先级可以影响线程调度,但Java的线程调度并不完全依赖于优先级,因此使用时需谨慎。守护线程是一种后台线程,当所有非...
8. **守护线程(Daemon Thread)**:守护线程不会阻止程序的退出,常用于后台服务,如垃圾回收器就是典型的守护线程。 9. **线程池(ThreadPool)**:通过`ExecutorService`和`ThreadPoolExecutor`,可以创建和管理...
8. **守护线程(Daemon Thread)**: 守护线程在所有非守护线程结束后自动终止,常用于后台服务,如垃圾回收器。 9. **中断线程**: `interrupt()`方法可以标记一个线程为中断状态,但不会立即停止线程。线程应...
Thread daemon = new Thread(() -> { // 守护线程代码 }); daemon.setDaemon(true); daemon.start(); ``` 六、Spring框架中的Async注解 在Spring框架中,可以使用@Async注解标记方法以异步方式执行,Spring会自动...
10. **守护线程(Daemon Thread)**:守护线程在没有非守护线程运行时自动结束,常用于后台服务,如垃圾收集器。 通过学习和实践上述知识点,你将能够深入理解多线程编程,并能有效利用这一技术提高程序的性能和...
6. **守护线程(Daemon Thread)** 守护线程是为其他线程服务的线程,当所有非守护线程结束时,即使守护线程还在运行,JVM也会退出。默认情况下,用户创建的线程都不是守护线程,可以通过`setDaemon(true)`将其设置...
6. **守护线程(Daemon Thread)**:与用户线程相对,守护线程不阻碍程序退出。例如,垃圾回收器就是典型的守护线程。 7. **线程池**:`ExecutorService`和`ThreadPoolExecutor`是Java并发框架的一部分,它们允许...
在`DaemonThreadTest.java`这个文件中,可能涉及到了Java的守护线程(Daemon Thread)。守护线程是一种特殊的线程,它的主要作用是为其他非守护线程提供服务。当所有的非守护线程都结束时,即使还有守护线程在运行,...
6. 守护线程(Daemon Thread): 守护线程是一种特殊的线程,当所有非守护线程结束时,守护线程也会自动终止。通常用于后台服务,如垃圾收集器。 7. 线程优先级: Java中的线程有优先级,但实际线程调度仍然由操作...