您的位置:首页 > 编程语言 > Java开发

java多线程程序设计三、后台线程(守护线程)

2013-11-27 00:00 651 查看
1、守护线程旨在后台为运行着的程序提供一般化的服务,但是它并不是属于程序的一部分,因此当所有的非后台线程结束之后,程序也就会结束这个时候就会杀死所有的守护线程,但是反过来却不是这样子,比如说:

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();

由后台线程(守护线程)创建的线程都是守护线程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: