io.seata.common.thread.NamedThreadFactory Maven / Gradle / Ivy
/*
* Copyright 1999-2019 Seata.io Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.seata.common.thread;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
import io.netty.util.concurrent.FastThreadLocalThread;
/**
* The type Named thread factory.
*
* @author slievrly
* @author ggndnn
*/
public class NamedThreadFactory implements ThreadFactory {
private final static Map PREFIX_COUNTER = new ConcurrentHashMap<>();
private final String prefix;
private final int totalSize;
private final boolean makeDaemons;
/**
* Instantiates a new Named thread factory.
*
* @param prefix the prefix
* @param totalSize the total size
* @param makeDaemons the make daemons
*/
public NamedThreadFactory(String prefix, int totalSize, boolean makeDaemons) {
PREFIX_COUNTER.putIfAbsent(prefix, new AtomicInteger(0));
int prefixCounter = PREFIX_COUNTER.get(prefix).incrementAndGet();
this.prefix = prefix + "_" + prefixCounter;
this.makeDaemons = makeDaemons;
this.totalSize = totalSize;
}
/**
* Instantiates a new Named thread factory.
*
* @param prefix the prefix
* @param makeDaemons the make daemons
*/
public NamedThreadFactory(String prefix, boolean makeDaemons) {
this(prefix, 0, makeDaemons);
}
/**
* Instantiates a new Named thread factory.
*
* @param prefix the prefix
* @param totalSize the total size
*/
public NamedThreadFactory(String prefix, int totalSize) {
this(prefix, totalSize, true);
}
@Override
public Thread newThread(Runnable r) {
String name = prefix;
if (totalSize > 1) {
name += "_" + totalSize;
}
Thread thread = new FastThreadLocalThread(r, name);
thread.setDaemon(makeDaemons);
if (thread.getPriority() != Thread.NORM_PRIORITY) {
thread.setPriority(Thread.NORM_PRIORITY);
}
return thread;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy