`
whoosh
  • 浏览: 232610 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java中User Thread和Daemon Thread的区别

阅读更多
Java将线程分为User线程和Daemon线程两种。通常Daemon线程用来为User线程提供某些服务。程序的main()方法线程是一个User进程。User进程创建的进程为User进程。当所有的User线程结束后,JVM才会结束。
通过在一个线程对象上调用setDaemon(true),可以将user线程创建的线程明确地设置成Daemon线程。例如,时钟处理线程、idle线程、垃圾回收线程、屏幕更新线程等,都是Daemon线程。通常新创建的线程会从创建它的进程哪里继承daemon状态,除非明确地在线程对象上调用setDaemon方法来改变daemon状态。
需要注意的是,setDaemon()方法必须在调用线程的start()方法之前调用。一旦一个线程开始执行(如,调用了start()方法),它的daemon状态不能再修改。通过方法isDaemon()可以知道一个线程是否Daemon线程。
通过执行下面的代码,可以很清楚地说明daemon的作用。当设置线程t为Daemon线程时,只要User线程(main线程)一结束,程序立即退出,也就是说Daemon线程没有时间从10数到1。但是,如果将线程t设成非daemon,即User线程,则该线程可以完成自己的工作(从10数到1)。
import static java.util.concurrent.TimeUnit.*; 

public class DaemonTest {
	public static void main(String[] args) throws InterruptedException {   
        Runnable r = new Runnable() {   
            public void run() {   
                for (int time = 10; time > 0; --time) {   
                    System.out.println("Time #" + time);   
                    try {   
                        SECONDS.sleep(2);   
                    } catch (InterruptedException e) {   
                        e.printStackTrace();   
                    }   
                }   
            }   
        };   
           
        Thread t = new Thread(r);   
        t.setDaemon(true);  // try to set this to "false" and see what happens   
        t.start();   
           
        System.out.println("Main thread waiting...");   
        SECONDS.sleep(6);   
        System.out.println("Main thread exited.");   
    }   
}


t为Daemon线程的输出:
Time #10
Time #9
Time #8
Main thread exited.
Time #7
t为User线程的输出:
Main thread waiting...
Time #10
Time #9
Time #8
Main thread exited.
Time #7
Time #6
Time #5
Time #4
Time #3
Time #2
Time #1
分享到:
评论

相关推荐

    java中的daemon thread

    java中有两种类型的thread,user threads 和 daemon threads。 User threads是高优先级的thread,JVM将会等待所有的User Threads运行完毕之后才会结束运行。 daemon threads是低优先级的thread,它的作用是为User ...

    JAVA最新面试资料-备战2023金三银四

    java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任 何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护线程,反之则为用户线程。 Thread....

    Java 守护线程,看这篇文章就对了! ( Daemon Thread )

    Java 的守护线程什么是Java的守护线程( Daemon Thread )?守护线程的区别?守护线程的作用?守护线程如何创建?守护线程如何判断?守护线程使用的注意事项总结 什么是Java的守护线程( Daemon Thread )? Java 提供...

    Java多线程守护线程

     在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)  作用  Daemon的作用是为其他线程的运行提供便利服务,守护线程典型的应用是 GC (垃圾回收器),它是一个很称职的守护者。  区别  ...

    2021版java高并发常问面试题

    在Java中,线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法`Thread.setDaemon(boolon)`;`true`则把该线程设置为守护线程,反之则为用户线程。`Thread....

    Java守护线程实例详解_动力节点Java学院整理

    在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。下面通过本文给大家分享java守护线程实例详解,需要的朋友参考下吧

    带注释的Bootstrap.java

    import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; ...

    Thinking in Java 4th Edition

    Java SE5 and SE6 .................. 2 Java SE6 ......................................... 2 The 4th edition........................ 2 Changes .......................................... 3 Note on the ...

    北京中科信软solaris培训

    Define a user-level preemption Define a kernel-level preemption Define deterministic dispatch latency Define priority inversion 8. Process Lifetime Differences among the system calls used to create a ...

    UNIX环境高级编程(第二版,英文版)

    User Identification Section 1.9. Signals Section 1.10. Time Values Section 1.11. System Calls and Library Functions Section 1.12. Summary Exercises Chapter 2. UNIX ...

    UNIX环境高级编程英文第三版+源码

    1.8 User Identification 16 1.9 Signals 18 1.10 Time Values 20 1.11 System Calls and Librar y Functions 21 1.12 Summary 23 Chapter 2. UNIX Standardization and Implementations 25 2.1 Introduction 25 ix ...

    UNIX Network Programming Volume 1, Third Edition (Unix网络编程卷1第3版英文版)

    User Datagram Protocol (UDP) Section 2.4. Transmission Control Protocol (TCP) Section 2.5. Stream Control Transmission Protocol (SCTP) Section 2.6. TCP Connection Establishment and Termination ...

    Python Cookbook英文版

    6.7 Forking a Daemon Process on Unix 6.8 Determining if Another Instance of a Script Is Already Running in Windows 6.9 Processing Windows Messages Using MsgWaitForMultipleObjects 7. System ...

    Python Cookbook, 2nd Edition

    • Table of Contents • Index • Reviews • Reader Reviews • Errata • Academic Python Cookbook, 2nd Edition By David Ascher, Alex Martelli, Anna Ravenscroft Publisher : O'Reilly ...

    ap6212a0_a33_sc3817r_服务器验证通过_bt已经通了_wifi需要修改配置_需要再次验证_20170626_1549.7z

    调通sina33下的AP6212A0版本的BT 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 ...完成时间:2017/6/26 11:01 版本:V1.0 本文参照: 《A33 wifi移植说明书.pdf》 还有就是全志R16的parrotv1.1的官方SDK(Android...

    ap6212a0_a33_sc3817r_神舟验证版本_借用nvram_ap6210这个配置文件_20170626_1834没有外层目录.7z

    调通sina33下的AP6212A0(WIFI+BT) 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 ...完成时间:2017/6/26 11:01 版本:V1.1 本文参照: 《A33 wifi移植说明书.pdf》 还有就是全志R16的parrotv1.1的官方SDK(Android...

    大三下学期期末复习.zip

    大三下学期期末复习: 卷 64G 的文件夹 PATH 列表 卷序列号为 364D-CC52 G:. │ ..txt │ ├─jsp课件 │ 1.ppt │ 2.ppt │ 3.ppt │ 4.ppt │ 5.ppt │ 6.ppt │ 7.ppt │ 8.ppt │ ├─matlab课件 ...│ ...

Global site tag (gtag.js) - Google Analytics