码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程系列---“基础篇”10之 线程优先级和守护线程

时间:2018-10-28 20:43:21      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:否则   rup   子进程   copy   dex   http   int   inter   test   

转自:https://www.cnblogs.com/weishao-lsv/p/8143976.html

 

在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)

Java平台把操作系统的底层进行了屏蔽,在JVM虚拟平台里面构造出对自己有利的机制,这就是守护线程的由来。Daemon的作用是为其他线程的运行提供服务,比如说GC线程。

User Thread线程和Daemon Thread唯一的区别之处就在虚拟机的离开,如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了。

守护线程用户也可以自行设定,方法:public final void setDaemon(boolean flag) 

注意点:

  正在运行的常规线程不能设置为守护线程。

  thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。

  在Daemon线程中产生的新线程也是Daemon的(这里要和linux的区分,linux中守护进程fork()出来的子进程不再是守护进程)

  根据自己的场景使用(在应用中,有可能你的Daemon Thread还没来的及进行操作时,虚拟机可能已经退出了)

 

非守护线程案例:

  

技术分享图片
public class DaemonTest {
    
     public static void main(String[] args) {
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread 线程结束....");
            }
        });
        thread.start();
        System.out.println("main线程 结束....");
    }
     
}
技术分享图片

结果输出:

  main线程 结束....
  thread 线程结束....

 

 

守护线程案例:

技术分享图片
package cn.kafka.t;

public class DaemonTest {
    
     public static void main(String[] args) {
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread 线程结束....");
            }
        });
     //设置为守护线程 thread.setDaemon(true); thread.start(); System.out.println("main线程 结束...."); } }
技术分享图片

结果输出:

  main线程 结束....

 

 

结论:主线程结束,JVM直接退出,守护线程不管是否运行结束都要伴随着JVM的退出而退出

Java多线程系列---“基础篇”10之 线程优先级和守护线程

标签:否则   rup   子进程   copy   dex   http   int   inter   test   

原文地址:https://www.cnblogs.com/Hermioner/p/9860521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!