/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.util.concurrent; import org.mule.runtime.core.util.StringUtils; import java.util.concurrent.atomic.AtomicLong; public class NamedThreadFactory implements java.util.concurrent.ThreadFactory { private final String name; private final AtomicLong counter; private final ClassLoader contextClassLoader; public NamedThreadFactory(String name) { this(name, null); } public NamedThreadFactory(String name, ClassLoader contextClassLoader) { if (StringUtils.isEmpty(name)) { throw new IllegalArgumentException("NamedThreadFactory must have a proper name."); } this.name = name; this.contextClassLoader = contextClassLoader; this.counter = new AtomicLong(1); } public Thread newThread(Runnable runnable) { Thread t = new Thread(runnable); configureThread(t); return t; } protected void configureThread(Thread t) { if (contextClassLoader != null) { t.setContextClassLoader(contextClassLoader); } doConfigureThread(t); } protected void doConfigureThread(Thread t) { t.setName(String.format("%s.%02d", name, counter.getAndIncrement())); } public ClassLoader getContextClassLoader() { return contextClassLoader; } public AtomicLong getCounter() { return counter; } public String getName() { return name; } }