/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.utilbox.concurrency;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Same behavior as {@link Executors#defaultThreadFactory()},
* but allows setting a custom name for created threads.
*/
public class NamingThreadFactory implements ThreadFactory {
protected final ThreadFactory defaultThreadFactory = Executors.defaultThreadFactory();
protected final String poolName;
protected boolean useThreadNumber;
protected final AtomicInteger threadNumber = new AtomicInteger(1);
public NamingThreadFactory(String poolName) {
this(poolName, false);
}
public NamingThreadFactory(String poolName, boolean useThreadNumber) {
this.poolName = poolName;
this.useThreadNumber = useThreadNumber;
}
@Override
public Thread newThread(Runnable runable) {
Thread thread = defaultThreadFactory.newThread(runable);
thread.setName(getThreadName());
return thread;
}
protected String getThreadName() {
if(useThreadNumber) {
return poolName + "-" + threadNumber.getAndIncrement();
} else {
return poolName;
}
}
}