# ThreadFactory

package com.mrzhang.javalearn.bingfa.demo_06;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;

import java.util.concurrent.ThreadFactory;

/**
 * ThreadFactory的几种实现
 * <p>
 * 使用线程池时,最好不用直接使用execute方法,而是使用线程工厂
 * <p>
 * 单独给线程起名字,发生问题时,后台分析时较方便
 *
 * @author 91MrZhang on 2020/8/17
 */
public class ThreadFactoryDemo01 {

    //guava包下的实现
    ThreadFactory guavaThreadFactory = new ThreadFactoryBuilder().setNameFormat("guavaThreadFactory-%d").build();

    //commons-lang3
    ThreadFactory basicThreadFactory = new BasicThreadFactory.Builder().namingPattern("basicThreadFactory--%d").build();

    //spring-core
    ThreadFactory springThreadFactory = new CustomizableThreadFactory("springThreadFactory--");

    public void m() {
        String tName = Thread.currentThread().getName();
        System.out.println("线程---->" + tName);
    }

    public static void main(String[] args) {
        ThreadFactoryDemo01 tf = new ThreadFactoryDemo01();
        for (int i = 0; i < 10; i++) {
            tf.guavaThreadFactory.newThread(tf::m).start();
            tf.basicThreadFactory.newThread(tf::m).start();
            tf.springThreadFactory.newThread(tf::m).start();
        }

    }
}