java多线程程序设计三、后台线程(守护线程)
2013-11-27 00:00
651 查看
1、守护线程旨在后台为运行着的程序提供一般化的服务,但是它并不是属于程序的一部分,因此当所有的非后台线程结束之后,程序也就会结束这个时候就会杀死所有的守护线程,但是反过来却不是这样子,比如说:
这个结果很清楚的表示了只要主线程死亡,所有的后台线程也都随之死亡。
在这个例子中我们使用了Thread对象方便线程属性的设定,当然为了使用Executors我们可以使用
通过实现ThreadFactory接口进行对象的创建和属性的赋值,如下所示:
由后台线程(守护线程)创建的线程都是守护线程
package multiThread; import java.util.concurrent.TimeUnit; public class SimpleDaemons implements Runnable { public void run(){ while(true){ try { TimeUnit.MILLISECONDS.sleep(100); System.out.println(Thread.currentThread()+ " "+ this); } catch (InterruptedException e) { // TODO Auto-generated catch block System.out.println("print interrupted"); } } } }
for(int i=0;i<5;++i){ Thread thread=new Thread(new SimpleDaemons()); thread.setDaemon(true);//在start之前调用 thread.start(); } System.out.println("All Daemons started!"); TimeUnit.MILLISECONDS.sleep(175);
这个结果很清楚的表示了只要主线程死亡,所有的后台线程也都随之死亡。
在这个例子中我们使用了Thread对象方便线程属性的设定,当然为了使用Executors我们可以使用
通过实现ThreadFactory接口进行对象的创建和属性的赋值,如下所示:
import java.util.concurrent.ThreadFactory; public class DaemonsThreadFactory implements ThreadFactory{ public Thread newThread(Runnable r){ Thread thread=new Thread(r); thread.setDaemon(true);//对创建的线程对象的属性进行设置 return thread; } } ExecutorService executorService2=Executors.newCachedThreadPool(new DaemonsThreadFactory()); for(int i=0;i<5;++i){ executorService2.execute(new SimpleDaemons()); } System.out.println("All Daemons started!"); TimeUnit.MILLISECONDS.sleep(5000); executorService2.shutdown();
由后台线程(守护线程)创建的线程都是守护线程
相关文章推荐
- Java多线程知识点总结——进阶篇(十一) 之 守护线程(后台运行)
- Java多线程 小知识 守护线程(后台线程)setDaemon、join方法、优先级、yield方法
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- java多线程总结二:后台线程(守护线程)
- Java基础多线程之后台守护线程,setDaemon(true)
- 【Java多线程】之九:守护线程
- java多线程-守护线程
- Java多线程-线程的调度(守护线程)
- Java多线程--守护线程(Daemon)
- 玩转java多线程学习篇五 线程的优先级和守护线程
- java多线程-守护线程
- Java【多线程知识总结(2)】调用setDaemon(true)变成后台线程
- java 多线程系列基础篇(十)之线程优先级和守护线程
- JAVA后台线程(守护线程)