用户线程与守护线程
来源:互联网 发布:淘宝企业店铺经营范围 编辑:程序博客网 时间:2024/05/01 09:22
1、定义
用户线程:在Java程序中创建的一个线程就是用户线程
守护线程也称为服务线程,用于为系统中的其它对象和线程提供服务的。比如用于垃圾回收的垃圾回收线程。这类线程并不是用户线程不可或缺的部分,只是用于提供服务的"服务线程"。基于这个特点,当虚拟机中的用户线程全部退出运行时,守护线程没有服务的对象后,JVM也就退出了。
2、区别
1)如果用户线程已经全部退出运行了,只剩下守护线程,虚拟机也会退出。
2)守护线程创建的子线程也是守护线程。
3、将用户线程设置为守护线程的方法
thread.setDaemon(true)
注意:thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
4、实例
1)垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
2)编写一个CommonThread(用户线程)和DaemonThread(守护线程)
public class DaemonTest{public static void main(String[] args){ DaemonThread dt=new DaemonThread(); CommonThread ct=new CommonThread(); Thread thread=new Thread(dt); Thread thread2=new Thread(ct); thread2.start(); thread.setDaemon(true); thread.start();}}class CommonThread implements Runnable{@Overridepublic void run(){// TODO Auto-generated method stubfor (int i = 0; i < 3; i++) {System.out.println("CommonThread:" + i);}}}class DaemonThread implements Runnable{@Overridepublic void run(){// TODO Auto-generated method stubfor (int i = 0; i < 10; i++) {System.out.println("DaemonThread:" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}执行结果之一:
用户线程执行完毕之后,JVM退出。整个进程结束。
从上分析的得出:1)不是所有的线程都可以设为守护线程,比如逻辑运算和读写操作
2)用户线程执行完毕之后,JVM就退出
3)要在start()方法之前设置setDaemon(true)
参考链接:http://blog.csdn.net/shimiso/article/details/8964414
- 用户线程与守护线程
- java守护线程与用户线程区别
- java 用户线程与守护线程
- Java之守护线程与用户线程
- 用户线程 和 守护线程
- 守护线程和用户线程
- 用户线程和守护线程
- 守护线程和用户线程
- 用户线程和守护线程
- JAVA守护线程与用户线程的区别
- java 中守护线程与用户线程的区别
- java守护线程与用户线程的区别
- java的守护线程与非守护线程(用户线程)
- 守护线程与非守护线程
- Java守护线程与非守护线程
- java-守护线程与非守护线程
- 守护线程与普通线程
- 阻塞线程与守护线程
- 承牌才母缮陶惺质刮嗽敝砍晕橇罢markdowncontent=
- 袄撞久郊摆巢窘翘媚鸵晌范揽徽惹markdowncontent=
- wget工具for Mac
- 食人
- 开源代码网站
- 用户线程与守护线程
- sdfgnmnghfddsfgnmnfd
- c#实现动态加载Dll
- TGPBitmap转为TBitmap
- quick-lua 实现 虚拟摇杆
- java 泛型详解
- AIDL接口写法小记
- 小米3如何打开usb调试
- 皮肤干燥补水的几个小妙招,让你全天水水的