package thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
public class Daemonromactory implements Runnable
{
public void run()
{
try
{
while (true)
{
TimeUnit.MILLISECONDS.sleep(100);
System.out.println(Thread.currentThread() + " : " + this);
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
throws Exception
{
ExecutorService service = Executors.newCachedThreadPool(new DaemonThreadFactory());
for (int i = 0; i < 10; i++)
{
service.execute(new Daemonromactory());
}
System.out.println("all daemons started");
TimeUnit.MILLISECONDS.sleep(100);
}
}
class DaemonThreadFactory implements ThreadFactory
{
public Thread newThread(Runnable r)
{
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
}
例子2 :由后台线程创建的线程全部都是后台线程。后台线程的存活时间取决于调用它的前台线程,如果前台线程执行完毕,后台线程执行就结束。
package thread;
import java.util.concurrent.TimeUnit;
/** 设置后台执行线程 */
public class SimpleDaemons implements Runnable
{
public void run()
{
try
{
while (true)
{
TimeUnit.MILLISECONDS.sleep(100);
System.out.println(Thread.currentThread());
}
}
catch (Exception e)
{
System.out.println("sleep() interrupted");
}
}
public static void main(String[] args)
throws Exception
{
for (int i = 0; i < 10; i++)
{
Thread daemon = new Thread(new SimpleDaemons());
daemon.setDaemon(true);// 设置为后台启动
daemon.start();
}
System.out.println("all daemons started");
TimeUnit.MILLISECONDS.sleep(100);// 当主程序停止时,后台程序同时被停止,可以设置睡眠时间来测试
}
}