import java.util.concurrent.ThreadFactory;
/**
* Thread Factory with Thread Group, which can work in multi thread env,
* can create thread by daemon flag, and named each thread in creating.
*
* @author daniel zhou
*
*/
class ThreadGroupFactory implements ThreadFactory{
//attributes
private ThreadGroup _threadGroup;
private String _namePrefix;
private boolean _createDaemonFlag;
private int _numThreads;
private final Object _synLock = new Object();
//assign the thread group
public ThreadGroupFactory(ThreadGroup threadGroup, String namePrefix) {
_threadGroup=threadGroup;
_namePrefix = namePrefix;
_numThreads=0;
}
//use parent thread group
public ThreadGroupFactory(String namePrefix) {
this(Thread.currentThread().getThreadGroup(), namePrefix);
}
//assign the daemon flag
public void createDaemonThreads(boolean createDaemonFlag){
synchronized(_synLock){
_createDaemonFlag=createDaemonFlag;
}
}
@Override
public Thread newThread(Runnable r) {
String threadName;
boolean daemonFlag;
synchronized(_synLock){
threadName = _namePrefix + ++_numThreads;
daemonFlag = _createDaemonFlag;
}
Thread thread = new Thread(_threadGroup, r, threadName);
thread.setDaemon(daemonFlag);
return thread;
}
}