package cn.superdesk.uniorder.executor.scheduler.config.thread;

import org.springframework.stereotype.Component;

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @Description: 自定义线程名称
 * @Author: linjinyu
 * @CreateDate: 2020/12/23 下午2:16
 * @UpdateUser: linjinyu
 * @UpdateDate: 2020/12/23 下午2:16
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Component
public class TheadFactoryName implements ThreadFactory {

	private static final AtomicInteger POOL_NUMBER  = new AtomicInteger(1);
	private final        ThreadGroup   group;
	private final        AtomicInteger threadNumber = new AtomicInteger(1);
	private final        String        namePrefix;

	public TheadFactoryName() {
		this("el-pool");
	}

	private TheadFactoryName(String name) {
		SecurityManager s = System.getSecurityManager();
		group = (s != null) ? s.getThreadGroup() :
				Thread.currentThread().getThreadGroup();
		//此时namePrefix就是 name + 第几个用这个工厂创建线程池的
		this.namePrefix = name +
				POOL_NUMBER.getAndIncrement();
	}

	@Override
	public Thread newThread(Runnable runnable) {

		// 此时线程的名字 就是 namePrefix + -thread- + 这个线程池中第几个执行的线程
		Thread thread = new Thread(group, runnable,
				namePrefix + "-thread-" + threadNumber.getAndIncrement(),
				0);

		if (thread.isDaemon()) {
			thread.setDaemon(false);
		}

		if (thread.getPriority() != Thread.NORM_PRIORITY) {
			thread.setPriority(Thread.NORM_PRIORITY);
		}

		return thread;
	}
}
