/* * Copyright 2014 NAVER Corp. * * 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 com.navercorp.pinpoint.common.util; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; /** * @author emeroad */ public class PinpointThreadFactory implements ThreadFactory { private final static AtomicInteger FACTORY_NUMBER = new AtomicInteger(0); private final AtomicInteger threadNumber = new AtomicInteger(0); private final String threadPrefix; private final boolean daemon; public PinpointThreadFactory() { this("Pinpoint", false); } public PinpointThreadFactory(String threadName) { this(threadName, false); } public PinpointThreadFactory(String threadName, boolean daemon) { if (threadName == null) { throw new NullPointerException("threadName"); } this.threadPrefix = prefix(threadName, FACTORY_NUMBER.getAndIncrement()); this.daemon = daemon; } private String prefix(String threadName, int factoryId) { final StringBuilder buffer = new StringBuilder(32); buffer.append(threadName); buffer.append('('); buffer.append(factoryId); buffer.append('-'); return buffer.toString(); } @Override public Thread newThread(Runnable job) { String newThreadName = createThreadName(); Thread thread = new Thread(job, newThreadName); if (daemon) { thread.setDaemon(true); } return thread; } private String createThreadName() { StringBuilder buffer = new StringBuilder(threadPrefix.length() + 8); buffer.append(threadPrefix); buffer.append(threadNumber.getAndIncrement()); buffer.append(')'); return buffer.toString(); } public static ThreadFactory createThreadFactory(String threadName) { return createThreadFactory(threadName, false); } public static ThreadFactory createThreadFactory(String threadName, boolean daemon) { return new PinpointThreadFactory(threadName, daemon); } }