package droidkit.concurrent;
import android.support.annotation.NonNull;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author Daniel Serdyukov
*/
public class NamedThreadFactory implements ThreadFactory {
private static final String DEFAULT_NAME = "Thread #";
private final AtomicInteger mThreadNumber = new AtomicInteger(1);
private final ThreadGroup mGroup;
private final String mName;
public NamedThreadFactory() {
this(DEFAULT_NAME);
}
public NamedThreadFactory(@NonNull String name) {
mName = name;
final SecurityManager sm = System.getSecurityManager();
if (sm != null) {
mGroup = sm.getThreadGroup();
} else {
mGroup = Thread.currentThread().getThreadGroup();
}
}
public Thread newThread(@NonNull Runnable r) {
final Thread thread = new Thread(mGroup, r, mName + mThreadNumber.getAndIncrement(), 0);
if (thread.isDaemon()) {
thread.setDaemon(false);
}
thread.setPriority(Thread.MIN_PRIORITY);
return thread;
}
}