守护线程有什么用? 不就是系统执行完之后,如果全是守护线程,就终止它,如果是非守护线程,应用程序仍可以执行吗,具体有什么用呢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如你正在 用 Java 写成的编辑器 写 Word 文档,你一边敲键盘,这是个 非守护线程, 后台还有一个 拼写检查 线程,它是个守护线程,他尽量不打扰你写稿子, 你们可以同时进行,他发现有拼写错误时在状态条显示错误,但是你可以忽略。就像 城堡门前有个卫兵 (守护线程),里面有诸侯(非守护线程),他们是可以同时干着各自的活儿,但是 城堡里面的人都搬走了, 那么卫兵也就没有存在的意义了。 to humanity: 那么用一个非守护线程就不能达到同样的作用了吗 leniz好像讲得比较明确,但不知对不对,其它人在讲它的作用,等于没讲一样,我问的是原理 上面说得不对守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。无论是什么线程,都一定会分时间片执行的,和上面的检测拼写及输入并没有任何关系 public static void main 是在一个非守护线程中运行的,但是JVM中并不一定只有这个非守护线程,你可以在程序中启动多个非守护线程,JVM同样也会等待它们的退出。所以并非主线程(运行main方法的线程)退出就一定退出JVM。 请问ChDw,守护线程究竟有什么作用呢 难道我如此失败,说了这么久你还是不懂?守护线程的唯一用途就是告诉JVM不需要等待它退出,当JVM中所有的线程都是守护线程的时候就可以正常的退出了普通线程不一样,JVM必须等待它的退出才可以正常的退出。 其实java里面的daemon和linux里面的daemon有很大区别的.linux下面的daemon能够释放控制台,后台运行,java里面的daemon线程就是楼上各位所说的了,只是如果jvm中所有的非daemon线程结束的时候,jvm就退出.俺原来以为java中的daemon线程可以作到linux中daemon一样的功能,结果不是.java什么时候能实现linux下的daemon那样的操作啊?连dos下面都有内存驻留程序. 有这样的必要吗?在Windows中,你可以运行javaw来达到释放控制台的目的,在Unix下你加&在命令的最后就行了。所以守护进程并非一定需要的。况且很多程序都是专门写一个服务程序来达到机器启动时启动的,并不需要Java本身实现 Unix下你加&在命令的最后就行了?这点不同意,而且还有很多问题.加了&,只是放后台执行而已,控制台没有释放.而且,作为一个后台进行,怎么去结束?不能每次都kill吧?服务程序总要有点服务程序的样子,要不然unix下面也不会费那么大劲做一个daemon来了. to ChDw: 我明白你说的意思,但你没有明白我的意思,我是说,非守护线程有什么用? 唉,看起来还是我没有说清楚。JVM会等待所有非守护线程退出以后才会退出!public static void main(String[] args) { new MyThread().start();//如果MyThread不是守护线程,那么JVM必须等待MyThread退出了才会退出//并不是退出main函数就已经表示JVM可以结束!} to ChDw: 看来你得好好学习语文了,我有必要把问题掰开了揉碎了问,我的意思是说,非守护线程这个特性具体应用在什么地方。难道非守护线程就不能替代它? ChDw(米) ,来继续锻炼你的表达能力,这对于一个从事软件行业的人可是很重要的哦. 觉得ChDw(米)讲得挺清楚吧有时候多种技术之间怎么取舍,还要看逻辑。 to ChDw(米):佩服老兄的耐心,呵呵 ChDw 你很爷们。其实你讲的挺好。 如何去掉String数组中的空值,形成新的String数组 Quartz 能不能动态加载、删除任务及触发器 BEA交易中间件简单使用问题,急! 线程优先级问题? 急寻J2EE开发高手或项目开发团队 百狗狗双搜(搜索之家)---搜索资料的最好网站(捧场就给分)^_^ 发布Mysql数据库应用程序 有谁作过PDF部分,谈谈经验! 0x06 的高低字节地址是什么 看看这个怪结果!~~~ 哪位大侠解释一下jre,java plug-in以及jvm之间的关系 怎么设置JFrame窗体的图标?
那么用一个非守护线程就不能达到同样的作用了吗
所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。无论是什么线程,都一定会分时间片执行的,和上面的检测拼写及输入并没有任何关系
俺原来以为java中的daemon线程可以作到linux中daemon一样的功能,结果不是.java什么时候能实现linux下的daemon那样的操作啊?连dos下面都有内存驻留程序.
这点不同意,而且还有很多问题.
加了&,只是放后台执行而已,控制台没有释放.
而且,作为一个后台进行,怎么去结束?不能每次都kill吧?
服务程序总要有点服务程序的样子,要不然unix下面也不会费那么大劲做一个daemon来了.
我明白你说的意思,但你没有明白我的意思,我是说,非守护线程有什么用?
JVM会等待所有非守护线程退出以后才会退出!
public static void main(String[] args) {
new MyThread().start();
//如果MyThread不是守护线程,那么JVM必须等待MyThread退出了才会退出
//并不是退出main函数就已经表示JVM可以结束!
}
看来你得好好学习语文了,我有必要把问题掰开了揉碎了问,我的意思是说,非守护线程这个特性具体应用在什么地方。难道非守护线程就不能替代它?
有时候多种技术之间怎么取舍,还要看逻辑。
佩服老兄的耐心,呵呵