/*** ** @(#) TradeCard.com 1.0 ** ** Copyright (c) 2010 TradeCard, Inc. All Rights Reserved. ** ** ** THIS COMPUTER SOFTWARE IS THE PROPERTY OF TradeCard, Inc. ** ** Permission is granted to use this software as specified by the TradeCard ** COMMERCIAL LICENSE AGREEMENT. You may use this software only for ** commercial purposes, as specified in the details of the license. ** TRADECARD SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY ** THE LICENSEE AS A RESULT OF USING OR MODIFYING THIS SOFTWARE IN ANY WAY. ** ** YOU MAY NOT DISTRIBUTE ANY SOURCE CODE OR OBJECT CODE FROM THE TradeCard.com ** TOOLKIT AT ANY TIME. VIOLATORS WILL BE PROSECUTED TO THE FULLEST EXTENT ** OF UNITED STATES LAW. ** ** @version 1.0 ** @author Copyright (c) 2010 TradeCard, Inc. All Rights Reserved. ** **/ package com.partydj.util; import java.util.concurrent.*; import java.util.concurrent.atomic.*; /** * **/ public class NamedThreadFactory implements ThreadFactory { private static final AtomicInteger poolNumber = new AtomicInteger(1); final ThreadGroup group; final AtomicInteger threadNumber = new AtomicInteger(1); final String namePrefix; private boolean daemon = false; private int priority = Thread.NORM_PRIORITY; public static NamedThreadFactory createDaemonFactory(String namePrefix) { return new NamedThreadFactory(namePrefix, true); } public static NamedThreadFactory create(String namePrefix) { return new NamedThreadFactory(namePrefix, false); } private NamedThreadFactory(String namePrefix) { SecurityManager s = System.getSecurityManager(); this.group = (s != null)? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); this.namePrefix = namePrefix != null ? namePrefix : "(Un)NamedThreadPool[" + poolNumber.getAndIncrement()+"]"; } private NamedThreadFactory(String namePrefix, boolean daemon) { this(namePrefix); this.daemon = daemon; } private NamedThreadFactory(String namePrefix, boolean daemon, int priority) { this(namePrefix); this.daemon = daemon; this.priority = priority; } @Override public Thread newThread(Runnable r) { Thread t = new Thread(group, r, namePrefix +"["+ threadNumber.getAndIncrement()+"]", 0); if (t.isDaemon() != daemon) { t.setDaemon(daemon); } if (t.getPriority() != priority) { t.setPriority(priority); } return t; } }