守护线程

JAVA并发编程——守护线程(Daemon Thread)

雨燕双飞 提交于 2019-12-14 19:13:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在 Java 中有两类线程:用户线程 (User Thread) 、守护线程 (Daemon Thread) 。 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。 用户线程和守护线程两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。 将线程转换为守护线程可以通过调用 Thread 对象的 setDaemon(true) 方法来实现。在使用守护线程时需要注意一下几点: (1) thread.setDaemon(true) 必须在 thread.start() 之前设置,否则会跑出一个 IllegalThreadStateException 异常。你不能把正在运行的常规线程设置为守护线程。 (2) 在 Daemon 线程中产生的新线程也是 Daemon 的。 (3) 守护线程应该永远不去访问固有资源,如文件、数据库

Java 复习 —— 守护线程以及线程监测工具

我的梦境 提交于 2019-12-14 19:12:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、守护线程 Java线程机制分为两种 ,用户线程(User Thread)和守护线程(Daemon Thread)。 用户线程:运行在前台,执行具体的任务。例如:程序的主线程,连接网络的子线程。 守护线程:运行在后台,为其他线程提供服务的。例如:垃圾回收器线程 线程异同:一旦所有的用户线程都运行结束,守护线程会随JVM一起退出,其实这就是守护线程应该的生命周期,因为他是服务于其用户线程的线程,当用户线程一旦执行完毕,守护线程的职责就结束了,理该退出!但是用户线程是不会在主线程结束的时候而退出的。 线程应用:用户线程一般执行在特定的任务上,守护线程一般使用在 数据库连接池中的监测线程,JVM启动后监测线程等。 2、API Thread t1 = new Thread(sample); t1.setDaemon(true); t1.start(); 1)thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。换句话说,你不能把正在运行的常规线程设置为守护线程。 2) 在Daemon线程中产生的新线程也是Daemon的。 3)注意读写操作或者计算逻辑是不能使用守护线程的。因为在Daemon

java守护线程和用户线程

大憨熊 提交于 2019-12-14 18:52:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java有两种Thread:“守护线程Daemon”与“用户线程User”。 守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。 任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开: 用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。 守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。 setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。 例:我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,当我们的程序中不再有任何运行中的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。 来源: oschina 链接