com.groupbyinc.common.util.DefaultForkJoinWorkerThreadFactory Maven / Gradle / Ivy
The newest version!
package com.groupbyinc.common.util;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinWorkerThread;
import java.util.concurrent.atomic.AtomicInteger;
/**
* ThreadFactory that keeps the current thread's name to make logs easier to follow and grep
*/
public class DefaultForkJoinWorkerThreadFactory implements ForkJoinPool.ForkJoinWorkerThreadFactory {
private static class WorkerThread extends ForkJoinWorkerThread {
private WorkerThread(ForkJoinPool pool) {
super(pool);
}
}
private final AtomicInteger threadNumber = new AtomicInteger(0);
private String parent;
private String name;
private boolean includeThreadNumber;
public DefaultForkJoinWorkerThreadFactory(String parent, String name, boolean includeThreadNumber) {
this.parent = parent;
this.name = name;
this.includeThreadNumber = includeThreadNumber;
}
@Override
public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
ForkJoinWorkerThread t = new WorkerThread(pool);
StringBuilder overrideName = new StringBuilder();
overrideName.append(parent);
overrideName.append(":");
overrideName.append(name);
if (includeThreadNumber) {
overrideName.append(":");
overrideName.append(threadNumber.incrementAndGet());
}
t.setName(overrideName.toString());
return t;
}
}