java并发编程(14)--java的守护线程与非守护线程
来源:互联网 发布:北京新机场 知乎 编辑:程序博客网 时间:2024/05/18 15:55
本文转载自:http://www.cnblogs.com/super-d2/p/3348183.html 尊重原创
最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) ,(PS:以前忽略了)。
估计学过Unix开发但是没有细致学习Java的同学们会疑惑了,操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制是构建在JVM的基础之上的,意思是Java平台把操作系统的底层给屏蔽起来,所以它可以在它自己的虚拟的平台里面构造出对自己有利的机制,而语言或者说平台的设计者多多少少是收到Unix思想的影响,而守护线程机制又是对JVM这样的平台凑合,于是守护线程应运而生。
Daemon的作用是为其他线程的运行提供服务,比如说GC线程。其实User Thread线程和Daemon Thread守护线程本质上来说去没啥区别的,唯一的区别之处就在虚拟机的离开:如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了。
守护线程并非虚拟机内部可以提供,用户也可以自行的设定守护线程,方法:public final void setDaemon(boolean on) ;但是有几点需要注意:
例子:
//完成文件输出的守护线程任务import java.io.*; class TestRunnable implements Runnable{ public void run(){ try{ Thread.sleep(1000);//守护线程阻塞1秒后运行 File f=new File("daemon.txt"); FileOutputStream os=new FileOutputStream(f,true); os.write("daemon".getBytes()); } catch(IOException e1){ e1.printStackTrace(); } catch(InterruptedException e2){ e2.printStackTrace(); } } } public class TestDemo2{ public static void main(String[] args) throws InterruptedException { Runnable tr=new TestRunnable(); Thread thread=new Thread(tr); thread.setDaemon(true); //设置守护线程 thread.start(); //开始执行分进程 } }
运行结果:文件daemon.txt中没有”daemon”字符串。
但是如果把thread.setDaemon(true); //设置守护线程注释掉,文件daemon.txt是可以被写入daemon字符串的
JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态,因此,在使用后台线程候一定要注意这个问题。
但是daemon Thread实际应用在那里呢?举个例子,web服务器中的Servlet,容器启动时后台初始化一个服务线程,即调度线程,负责处理http请求,然后每个请求过来调度线程从线程池中取出一个工作者线程来处理该请求,从而实现并发控制的目的。
网上摘的一个图,方便大家理解:
- java并发编程(14)--java的守护线程与非守护线程
- Java守护线程与非守护线程
- java-守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- Java的守护线程与非守护线程
- java的守护线程与非守护线程(转)
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- Java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- Java的守护线程与非守护线程
- 242. Valid Anagram
- More Effective C++----(6)自增、自减操作符前缀形式和后缀形式的区别
- 1年日记(5月篇)
- 学习Unity射线的创建使用
- 样式和主题
- java并发编程(14)--java的守护线程与非守护线程
- HDU 1544Palindromes(求回文字符串)
- Partition List
- RS WLAN产品测试全面解决方案
- 自由落体
- vtk实战(五十)—计算线段与多边形的交点
- UVA 11636 Hello World!
- C语言位运算
- 通信协议:HTTP、TCP、UDP