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

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);
java多线程程序设计三、后台线程(守护线程)
这个结果很清楚的表示了只要主线程死亡,所有的后台线程也都随之死亡。
在这个例子中我们使用了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多线程程序设计三、后台线程(守护线程))