Java中User Thread和Daemon Thread的区别
来源:互联网 发布:外服盒子mac 编辑:程序博客网 时间:2024/04/28 02:43
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中User Thread和Daemon Thread的区别
- Java中User Thread和Daemon Thread的区别
- Java中User Thread和Daemon Thread的区别
- java Daemon Thread User Thread
- User Thread与Daemon Thread- java
- JAVA的daemon Thread
- Java中Thread.sleep()和Thread.currentThread.sleep()的区别
- linux中process, kernel thread, user thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- java中thread和runnable的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- 最近在搞SPI Flash的驱动,有一个问题迟迟不能解决
- lua学习:游戏中的Lua
- 黄金价格涨了,比mai的价格涨了10块钱... ...
- C#中的垃圾回收及资源管理器
- java排序 内部排序 选择排序
- Java中User Thread和Daemon Thread的区别
- 升级、编译自己的内核—— Debian篇
- weblogic11g 安装集群 —— win2003 系统、单台主机
- uva 694
- 交换字符串中每一对单词
- 用nmon监控Linux系统资源
- 黑马程序员--05.类加载器--03【从JVM加载类的过程再看类加载器】【从Java源码再看双亲委派模型】
- 开始学习C++,立帖为证
- mongo 学习二 mongodb shell操纵mongodb