java 线程池中如何自定义每个线程名称 1C

**java 线程池中如何自定义每个线程名称
java 线程池中如何自定义每个线程名称
**

6个回答

java线程池中管理的线程名称都是pool-1-thread-1这种规则的名称。
一个线程池的简单例子如下:

 import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainController {
    private ExecutorService executor = Executors.newFixedThreadPool(3);

    public void submitTask(){
        for(int i =0;i<10;i++){
            executor.submit(new Runnable(){
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"正处理");
                }
            });
        }

        //处理完成后关闭线程池
        executor.shutdown();
    }

    public static void main(String[] args) {
        MainController c = new MainController();
        c.submitTask();
    }
}

利用线程池执行10个任务,可以看到线程池中线程的名称的规律了。

这个简单啊:获取线程后进行判断,因为线程的线程池中的名字都是pool-1-thread-1,以最后一个数字进行数组存储名字,在每个线程里==判断进行区分名字;

这样就可以了

参考
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);

    public Thread newThread(Runnable r) {
        return new Thread(r, "我的线程 #" + mCount.getAndIncrement());
    }
};
CXD_2009
arvin_chen_ 感谢
8 个月之前 回复

补充下,线程池的创建线程池对象时,有一个参数是ThreadFactory类型,如果不传递,默认用的是DefaultFactory,我们可以自定义一个ThreadFactory然后作为参数传到进去,这个类里面就可以自定义线程池中创建的线程的名称。api:

     public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
            BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory);

@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName());
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
mainMethods m=new mainMethods();
mainMethods m2=new mainMethods();
m.setName("m");
m2.setName("m2");
m.start();
m2.start();
}

qq_33845360
qq_33845360 知道 什么 是线程池吗
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问