知识大全 Java的用户线程和守护线程
Posted 知
篇首语:积土而为山,积水而为海。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java的用户线程和守护线程相关的知识,希望对你有一定的参考价值。
Java的用户线程和守护线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java有两种线程分别是用户线程(UserThread)和守护线程(DaemonThread) 所谓守护线程 是指在程序运行的时候在后台提供一种通用服务的线程 比如垃圾回收线程就是一个很称职的守护者 并且这种线程并不属于程序中不可或缺的部分 因此 当所有的非守护线程结束时 程序也就终止了 同时会杀死进程中的所有守护线程 反过来说 只要任何非守护线程还在运行 程序就不会终止 用户线程和守护线程两者几乎没有区别 唯一的不同之处就在于虚拟机的离开 如果用户线程已经全部退出运行了 只剩下守护线程存在了 虚拟机也就退出了 因为没有了被守护者 守护线程也就没有工作可做了 也就没有继续运行程序的必要了 将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现 在使用守护线程时需要注意一下几点 ( )thread setDaemon(true)必须在thread start()之前设置 否则会跑出一个IllegalThreadStateException异常 你不能把正在运行的常规线程设置为守护线程 ( )在Daemon线程中产生的新线程也是Daemon的 ( )守护线程应该永远不去访问固有资源 如文件 数据库 因为它会在任何时候甚至在一个操作的中间发生中断 代码示例 import ncurrent TimeUnit; /** * 守护线程*/ public class Daemons /** * @param args * @throws InterruptedException */ public static void main(String[] args)throws InterruptedException Thread d = new Thread(new Daemon()) d setDaemon(true) //必须在启动线程前调用 d start() System out println( d isDaemon()= + d isDaemon()+ ) TimeUnit SECONDS sleep( ) class DaemonSpawn implements Runnable public void run() while (true) Thread yield() class Daemon implements Runnable private Thread[] t = new Thread[ ]; public void run() for (int i= ;i<t length;i++) t[i] = new Thread(new DaemonSpawn()) t[i] start() System out println( DaemonSpawn + i + started ) for (int i= ;i<t length;i++) System out println( t[ + i + ] isDaemon()= + t[i] isDaemon()+ ) while (true) Thread yield() 运行结果 d isDaemon()= true DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true t[ ] isDaemon()= true 以上结果说明了守护线程中产生的新线程也是守护线程 如果将mian函数中的TimeUnit SECONDS sleep( ) 注释掉 运行结果如下 d isDaemon()= true DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started DaemonSpawn started 以上结果说明了如果用户线程已经全部退出运行了 只剩下守护线程存在了 虚拟机也就退出了 cha138/Article/program/Java/hx/201311/26210相关参考
这个程序验证了后台线程与用户线程的区别以及之间的关系证明了只要所有的用户线程结束了那么后台线程就将必须结束! importncurrentTimeUnit; publicclass
Java多线程编程基础之线程和多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着计算机技
Java线程安全和非线程安全 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ArrayList和
在非用户线程中访问用户线程的GUI资源 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
创建线程 在Java程序中创建线程有几种方法每个Java程序至少包含一个线程主线程其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的 Java线程可以通过直接
线程的创建和启动 java语言已经内置了多线程支持所有实现Runnable接口的类都可被启动一个新线程新线程会执行该实例的run()方法当run()方法执行完毕后线程就结束了一旦一个线程执行
Java的多线程-实现多线程及线程的同步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一.实现
Java多线程如何创建多个线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java多线程的同
JAVA线程编程----两个线程的程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 于Java
Java线程/内存模型的缺陷和增强 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java在语言