package de.skuzzle.polly.tools.concurrent;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.regex.Pattern;
public class ThreadFactoryBuilder implements ThreadFactory {
private final static Pattern PATTERN = Pattern.compile("%n%");
private String name;
private int threadNum;
private int priority;
private UncaughtExceptionHandler exceptionHandler;
private boolean daemon;
public ThreadFactoryBuilder() {
this("");
}
public ThreadFactoryBuilder(String name) {
this.name = name;
this.priority = Thread.NORM_PRIORITY;
}
public ThreadFactoryBuilder setName(String name) {
this.name = name;
return this;
}
public ThreadFactoryBuilder setPriority(int priority) {
this.priority = priority;
return this;
}
public ThreadFactoryBuilder setUncaughtExceptionHandler(UncaughtExceptionHandler h) {
this.exceptionHandler = h;
return this;
}
@Override
public Thread newThread(Runnable r) {
String name = ThreadFactoryBuilder.PATTERN.matcher(this.name).replaceFirst(
"" + this.threadNum++);
final Thread result = new Thread(r, name);
result.setDaemon(this.daemon);
result.setPriority(this.priority);
result.setDaemon(this.daemon);
if (this.exceptionHandler != null) {
result.setUncaughtExceptionHandler(this.exceptionHandler);
}
return result;
}
public ThreadFactory setDaemon(boolean daemon) {
this.daemon = daemon;
return this;
}
}