只要有非deamon线程在运行,jvm就不会自动退出。比如main线程也是非deamon线程,如果一个程序中只要main,和deamon线程,假设deamon线程死循环打印一字符串,这是如果main线程结束,则deamon线程也将自动消亡!因为jvm退出了!
下面是测试实例
package test;
import java.io.IOException;
import java.io.InputStream;
public class DeamonTest implements Runnable
{
int i=0;
@Override
public void run()
{
for(;;)
{
System.out.println("time at "+i++);
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] arg) throws IOException
{
Thread deamon=new Thread(new DeamonTest());
deamon.setDaemon(true);
deamon.start();
InputStream in=System.in;
byte[] data=new byte[1024*1024];
System.out.println("please input a string to end the main thread....");
int count=in.read(data);
byte[] read=new byte[count];
System.arraycopy(data, 0, read, 0, count);
System.out.println(new String(read));
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run()
{
System.out.println("jvm exit!");
}
});
}
}
运行后,用debug可以观察到此时main线程和deamon线程正在运行。如图
当,输入一个字符串时,这时main线程结束,deamon线程也随即结束
- 大小: 20.4 KB
- 大小: 12.8 KB
分享到:
相关推荐
在Java中,可以使用Thread的join()方法等待线程结束,或者设置Daemon线程使其在所有非Daemon线程结束后自动终止。在适当的时候,还需要优雅地终止线程,防止资源泄漏。 总之,"Java多线程测试程序"结合了多线程和...
以下是对"java多线程测试实例"的详细解析: 1. **线程的创建方式** - 实现`Runnable`接口:创建一个类实现`Runnable`接口,然后将其实例传递给`Thread`类的构造函数创建线程。 - 继承`Thread`类:创建一个类直接...
### 六、守护线程(Daemon) 守护线程通常用于后台服务,如垃圾收集器。当所有非守护线程结束后,即使还有守护线程在运行,JVM也会退出。可以通过`setDaemon(true)`设置线程为守护线程。 通过深入理解并熟练运用...
- **Daemon线程**:后台线程,当所有非守护线程结束后,守护线程也会自动终止。 8. **线程中断** - **interrupt()与isInterrupted()**:线程可以通过中断标识来停止自身或检查是否被中断。 9. **线程优先级** -...
- **守护线程**:守护线程(Daemon Thread)是一种不会阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,程序会自动退出,即使还有守护线程正在运行。 - **Join方法**:允许一个线程等待另...
在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地执行多个任务。在多线程环境中,程序的...在编写`test`这样的示例时,你可以创建并启动线程,测试各种线程控制和同步方法,从而加深对Java线程的理解。
守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与并发工具类**:Java提供了一系列并发友好的集合,如ConcurrentHashMap、CopyOnWriteArrayList等,...
面试中,线程问题经常被用来测试候选人的并发处理能力和对Java内存模型的理解。以下是一些关于Java线程的常见面试知识点,这些内容可能出现在线程.doc文档中: 1. **线程的创建方式**: - 实现`Runnable`接口:...
除了上述内容,学习Java多线程还需要了解守护线程(Daemon Thread)、线程池(ThreadPoolExecutor)和并发集合(如ConcurrentHashMap、ConcurrentLinkedQueue等),这些都是高效处理并发问题的重要工具。 综上所述...
Java中的线程可以分为守护线程(DaemonThread)和用户线程(UserThread)两类。守护线程和用户线程的唯一区别是它们对虚拟机的退出(程序的终止)的影响。 当JVM中只有守护线程时,虚拟机会退出,程序终止;而当JVM中至少...
- **守护线程(Daemon)**:守护线程不会阻止程序的退出,只有当所有的非守护线程结束时,JVM才会退出。通过setDaemon(true)将线程设置为守护线程。 - **线程池(ThreadPool)**:通过Executor框架管理线程,避免...
在测试和调试阶段,开发者需要确保daemon和client的兼容性和稳定性。这涉及到全面的单元测试、集成测试和系统测试,确保在各种场景下都能正常工作。此外,由于是底层系统组件,安全性也是一个重要的考虑因素,需要...
在这个"Java高级特性 - 多线程练习题.zip"中,我们可以看到两个文件,分别是"顺序输出.txt"和"售票窗口.txt",它们很可能是用来展示或测试多线程编程概念的例子。 1. **线程的创建与启动** Java中创建线程主要有两...
守护进程(Daemon)是长时间运行且独立于控制终端的特殊进程,通常用于后台服务,例如网络服务、日志记录等。它们通过调用`setsid()`函数来脱离控制终端,并通常在启动时关闭标准输入、输出和错误流。守护进程通常以...
但是该库仅在Linux和OSX上进行了测试,因此,如果您有能力在其他平台上进行测试,请给我反馈(#26)。 请随时向我发送错误报告和修复。 非常感谢所有贡献者。 产品特点 Goroutine安全守护程序; 开箱即用的pid...
│ 高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │ 高并发编程第一阶段13讲、线程ID,优先级讲解.mp4 │ 高并发编程第一阶段14讲、Thread的join方法详细介绍,结合一个典型案例.mp4 │ 高...
- **设置步骤**:下载COSBench压缩包(如0.4.2.c3),解压后按照官方文档配置测试控制器和工作线程,指定RadosGW的相关参数。 - **执行测试**:启动COSBench,运行预设的测试计划,记录并分析测试结果。 **4. 结果...
这些源代码文件共同构成了"Fortune Daemon"的核心功能,展示了其在分布式系统、网络通信、多线程处理以及模拟测试等多个方面的技术应用。开源软件的优势在于,用户不仅可以自由地使用这些代码,还可以根据自身需求...
│ 高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │ 高并发编程第一阶段13讲、线程ID,优先级讲解.mp4 │ 高并发编程第一阶段14讲、Thread的join方法详细介绍,结合一个典型案例.mp4 │ 高...