- 浏览: 265176 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程
2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread在运行,则虚拟机退出。
虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemonthreads,JVM会使得这个threads停止,JVM也停下
如果此时正在运行的其他threads有Non-daemonthreads,那么必须等所有的Non daemon线程结束了,JVM才会停下来
4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon 线程
默认产生的线程全部是Non-daemon线程。
5.JVM的资源回收线程就是这类线程。
6.在该类线程中产生的其他线程不用设置,默认都是守护线程。
5.Thread.setDaemon()用法使用:
1. setDaemon需要在start方法调用之前使用
2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程
3. 如果jvm中都是后台进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)
4. 主线程结束后,
1)用户线程将会继续运行
2) 如果没有用户线程,都是后台进程的话,那么jvm结束
另外:
setDaemon方法把java的线程设置为守护线程,此方法的调用必须在线程启动之前执行。只有在当前jvm中所有的线程都为守护线程时,jvm才会退出。
如果创建的线程没有显示调用此方法,这默认为用户线程。
实例如下:
import java.io.IOException;
public class DaemonThreadTest extends Thread{
publicDaemonThreadTest() {
}
public voidrun(){
for(int i = 1; i <= 100;i++){
try{
Thread.sleep(100);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.out.println(i);
}
}
publicstatic void main(String [] args){
DaemonThreadTest test = newDaemonThreadTest();
// 如果不设置daemon,那么线程将输出100后才结束
test.setDaemon(true); //在test未结束前,执行下面的输入操作,则test终止执行,因为jvm中只剩下守护线程时会终止
test.start();
System.out.println("isDaemon = " +test.isDaemon());
try {
System.in.read(); //接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.print(Thread.currentThread().getName()+"结束");
}
}
2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread在运行,则虚拟机退出。
虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemonthreads,JVM会使得这个threads停止,JVM也停下
如果此时正在运行的其他threads有Non-daemonthreads,那么必须等所有的Non daemon线程结束了,JVM才会停下来
4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon 线程
默认产生的线程全部是Non-daemon线程。
5.JVM的资源回收线程就是这类线程。
6.在该类线程中产生的其他线程不用设置,默认都是守护线程。
5.Thread.setDaemon()用法使用:
1. setDaemon需要在start方法调用之前使用
2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程
3. 如果jvm中都是后台进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)
4. 主线程结束后,
1)用户线程将会继续运行
2) 如果没有用户线程,都是后台进程的话,那么jvm结束
另外:
setDaemon方法把java的线程设置为守护线程,此方法的调用必须在线程启动之前执行。只有在当前jvm中所有的线程都为守护线程时,jvm才会退出。
如果创建的线程没有显示调用此方法,这默认为用户线程。
实例如下:
import java.io.IOException;
public class DaemonThreadTest extends Thread{
publicDaemonThreadTest() {
}
public voidrun(){
for(int i = 1; i <= 100;i++){
try{
Thread.sleep(100);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.out.println(i);
}
}
publicstatic void main(String [] args){
DaemonThreadTest test = newDaemonThreadTest();
// 如果不设置daemon,那么线程将输出100后才结束
test.setDaemon(true); //在test未结束前,执行下面的输入操作,则test终止执行,因为jvm中只剩下守护线程时会终止
test.start();
System.out.println("isDaemon = " +test.isDaemon());
try {
System.in.read(); //接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.print(Thread.currentThread().getName()+"结束");
}
}
发表评论
-
SequenceInputStream 合并流与切割流
2017-09-27 15:06 430将多个流合并成一个流 SequenceInputStrea ... -
java io 之管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例
2017-09-27 10:39 298java 管道介绍 在java中, ... -
Java通过Executors提供四种线程池
2017-09-27 10:21 466Java通过Executors提供四种线程池,分别为: new ... -
Java同步注解(Annotation)解释
2017-09-18 18:18 1038JDK 5.0 以后增加了注解。就是@后面加一个名称。有其自身 ... -
url参数中出现+、空格、=、%、&、#等字符的解决办法
2017-03-08 15:31 595url出现了有+,空格,/,?,%,#,&,=等特殊符 ... -
Eclipse远程调试之Socket Attach与Socket Listen
2014-08-21 13:52 1691打个比方,被远程debug/监视 的进程就是一个风度翩翩的美少 ... -
关于java用jni调用 dll动态库Can't find dependent libraries错误的解决
2014-08-21 08:56 12311.package com.bsp.zauto.commo ... -
java 远程调试备忘
2013-12-11 16:45 874远程调试java程序 http://hi.baidu.com ... -
[转贴]System.getProperty()参数大全
2013-11-20 15:39 493一直做Web应用一般不会用到这些东西,今天在搞一个代码生成器的 ... -
DelayQueue队列研究
2013-08-07 15:40 6731.DelayQueue 是一个无界的BlockingQue ... -
java 原语
2013-07-18 13:20 1184介绍 操作系统用语范畴 ... -
精巧好用的DelayQueue
2013-07-03 11:13 666我们谈一下实际的场景吧。我们在开发中,有如下场景 a) 关闭 ... -
log4j的配置文件备份.[成功测试]
2013-06-25 14:29 9391.在项目的config目录下,新建配置文件 log4j.xm ... -
log4j的xml配置详细
2013-06-24 13:48 617这是log4j默认的配置,我们先熟悉一下 <!-- ... -
java用log4j记录日志的基本方法
2013-06-24 10:57 585Log4j基本使用方法 Log4j由三个重要的组件构成: ... -
java 堆 栈
2013-06-21 16:53 603由String看Java堆栈问题,包括==以及equal()。 ... -
Java ThreadPoolExecutor思想介绍
2013-06-14 16:31 598一、简介 线程池类为 j ... -
JDK线程池的ThreadFactory
2013-06-14 16:10 797JDK线程池:Executors.newFixedThread ... -
java 中到底什么叫闭包
2013-03-26 13:24 1229什么是闭包 闭包的 ... -
java中的标签
2013-03-20 14:46 788Java中为了使程序结构更 ...
相关推荐
java daemon 程序,有助于理解守护线程的概念和使用
5. **守护线程(Daemon)**:守护线程是一种不会阻止程序退出的特殊线程,例如JVM的垃圾收集器就是守护线程。通过`setDaemon(true)`方法将线程设置为守护线程。 6. **线程池**:Java提供`ExecutorService`和`...
5. 守护线程(Daemon Thread): 守护线程是用于支持应用程序运行的后台线程,比如垃圾回收器就是守护线程。当所有非守护线程结束时,即使还有守护线程在运行,JVM也会退出。我们可以使用`setDaemon(true)`方法将...
守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,程序会终止,即使还有守护线程在运行。 掌握Java的多线程机制对于编写高效、并发友好的应用程序至关重要,它...
8. **守护线程(Daemon Thread)** 守护线程不会阻止程序的退出,如JVM的垃圾收集器就是守护线程。可以通过`setDaemon(true)`将线程设置为守护线程。 9. **线程池** Java的`ExecutorService`和`...
2.守护线程(Daemon Thread):后台运行的线程,当所有非守护线程结束时,守护线程也会自动结束。 六、线程池 Java提供ExecutorService和ThreadPoolExecutor来管理线程,可以避免频繁创建和销毁线程带来的开销,...
守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护线程也会随之结束,通常用于后台服务。 总结: Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步...
6. **守护线程(Daemon Threads)** 守护线程是一种特殊类型的线程,它不会阻止程序的退出。Java中的`Thread.setDaemon(true)`方法可将线程设置为守护线程。通常,后台服务或日志记录线程可以设置为守护线程。 7. ...
七、守护线程(Daemon) 守护线程在所有非守护线程结束时自动终止,通常用于后台服务,如垃圾收集器。 通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx...
在Java中,可以使用Thread的join()方法等待线程结束,或者设置Daemon线程使其在所有非Daemon线程结束后自动终止。在适当的时候,还需要优雅地终止线程,防止资源泄漏。 总之,"Java多线程测试程序"结合了多线程和...
守护线程(Daemon Thread)是一种特殊的线程,当所有非守护线程结束时,程序会自动结束,即使还有守护线程在运行。Java的Thread类的setDaemon()方法可以将线程设置为守护线程。 八、线程池 Java的ExecutorService和...
4. 守护线程(Daemon Thread):这种线程在没有其他非守护线程运行时会自动结束,常用于后台服务,如垃圾回收器。 5. 死锁、活锁和饥饿:线程安全编程中需要避免这些问题,死锁是两个或更多线程相互等待对方释放...
守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与并发工具类**:Java提供了一系列并发友好的集合,如ConcurrentHashMap、CopyOnWriteArrayList等,...
在 Java 虚拟机退出时,Daemon 线程中的 finally 块并不一定会执行。 构造线程 一个新构建的线程对象是由其父线程来进行空间分配的,而子线程继承了父线程的是否为 Daemon、优先级和加载资源的 contextClassLoader...
10. 守护线程(Daemon Thread): 守护线程是一种特殊类型的线程,它不阻碍程序的退出。当所有非守护线程结束时,JVM会停止运行,即使还有守护线程在运行。通过setDaemon(true)方法可以将线程设置为守护线程。 ...
此外,守护线程(Daemon Thread)是一种特殊类型的线程,它们在所有非守护线程结束时自动终止,常用于后台服务,如垃圾收集器。 总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个...
7. **守护线程(Daemon)**:守护线程不会阻止程序的退出,通常用于后台服务,如垃圾收集器。 8. **死锁(Deadlock)**:多个线程互相等待对方释放资源导致的僵局,需要谨慎设计并发逻辑以避免这种情况。 9. **...
8. 守护线程(Daemon Thread): 守护线程不会阻止程序的退出,常用于后台服务,如垃圾回收器就是守护线程。 9. 线程优先级: Java线程有10个优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_PRIORITY(10),但...
在Java中,`join()`、`daemon`线程以及同步机制是多线程编程中的重要概念,对于理解和编写高效的并发代码至关重要。 首先,我们来讨论`join()`方法。在多线程环境中,有时候我们需要确保一个线程在执行完它的任务后...
- 守护线程(Daemon Thread)是一种后台线程,当所有非守护线程结束时,程序退出,即使守护线程仍在运行。通过`setDaemon(true)`方法设置。 7. **线程池** - `ExecutorService`和`ThreadPoolExecutor`是Java并发...