通过DaemonThreadFactory创建后台线程池
另外:如果是后台线程创建的线程,将都是后台线程。
package wzh.daemon; import java.util.concurrent.ThreadFactory; public class DaemonThreadFactory implements ThreadFactory { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r); t.setDaemon(true); return t; } }
package wzh.daemon; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class DaemonFromFactory implements Runnable { public static void main(String[] args) throws InterruptedException { ExecutorService exec = Executors .newCachedThreadPool(new DaemonThreadFactory()); for (int i = 0; i < 10; i++) { exec.execute(new DaemonFromFactory()); } System.out.println("All daemons started"); TimeUnit.MILLISECONDS.sleep(50000); } @Override public void run() { try { while (true) { TimeUnit.MILLISECONDS.sleep(100); System.out.println(Thread.currentThread() + " " + this); } } catch (Exception e) { System.out.println("Interrupted"); } } }