2 injavawetrust InJavaWeTrust 于 2016.03.25 09:35 提问

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

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

7个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.25 09:44

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个任务,可以看到线程池中线程的名称的规律了。

a77712345
a77712345   2016.03.25 11:43

@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 知道 什么 是线程池吗
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.27 19:21

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

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

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

qq_39879307
qq_39879307   2018.01.25 20:23

这样就可以了

CSDNXIAON
CSDNXIAON   2016.03.30 11:23

java自定义线程池
自定义java 线程池
java 自定义线程池
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

luochoudan
luochoudan   Ds   Rxr 2016.03.25 09:41

参考
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());
    }
};
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java设置线程池中线程的名字
项目中使用ThreadPoolExecutor进行多线程开发。使用起来很方便,但是当用jstack查看堆栈信息或者Jprofiler调试性能的时候,看到的线程都是pool-1-thread-1\2\3\4之类的。如果一个系统中用到了多个线程池,就无法区分哪个线程造成的系统问题。所以每次都需要点 Thread Dumps 去查看线程执行的具体的代码与堆栈信息,推测是哪个地方出的问题。 于是
线程池命名问题
ThreadPoolManager.potatoPool.execute(new MyThread()); 在这种情况下,线程池会给线程自定义命名,如果想改变线程的名称,那么需要在线程中的run方法中给线程setName 如下: public class MyThread extends Thread{ public String threadName; public MyThread
java 给线程池改名字的作用
近期weblogic会有很多线程,有时候能达到250个,其中有一类很有30-40个,就是如下所示,初一看多线程池,有很多个线程池,然后是生产者消费者模式。现在面临的问题是,如何定位是哪些功能?从目前情况来看无法定位,解决方法是把线程池的名字修改了,借此找到功能。 "pool-21-thread-2" prio=10 tid=0x00007f41c00f9800 nid=0xc23d waitin
ThreadPoolExecutor中运行线程名称的修改
项目中使用到了ThreadPoolExecutor,这个是挺好的东西,线程池的实现。但有一点不太爽的是,用Jprofiler调试由它创建的线程的时候,看到的都是pool-1-thread-1\2\3\4之类的。这是它自身的默认规则产生的,pool代表这是池,-1-代表是第几个ThreadPoolExecutor产生的,-thread-1是递增的。 所以每次我都要点 Thread Dumps 去查
多线程_获取和设置线程对象名称
package cn.itcast_03; /* * 如何获取线程对象的名称呢? * public final String getName():获取线程名称。 * 如何设置线程对象的名称呢? * public final void setName(String name):设置线程的名称。 * * 针对不是继承Thread类的子类该如何获取线程名称呢? * publ
统计线程池所有任务的运行总耗时
ExecutorService executor = Executors.newFixedThreadPool(10); long start = System.currentTimeMillis(); for (int i = 0; i &amp;lt; 10; i++) { executor.submit(() -&amp;gt; { ...
多个线程同时执行,每个线程分别打印出自己的名字
public class ThreadName extends Thread{ public void run() { System.out.println("线程:"+this.getName());//打印线程名字 } public static void main(String[] args) { // TODO Auto-generated method stub
线程池自定义扩展,捕获异常位置(非常有用)
一、前言 留给自己的前言:这个线程池在运用中非常有用,能够捕获异常是非常重要的,否则在此期间很难发现你的异常在哪里提交了; 二 自己定义扩展线程池 1、首先构建一个基础的 执行线程 package jDKMulit; import java.util.concurrent.*; /** * Created by ycy on 16/1/12. */ public class Dv
根据线程名称找到指定的线程,并给该线程停掉
根据线程名称找到指定的线程,并给该线程停掉
Java线程池中的核心线程是如何被重复利用的?
Java线程池中的核心线程是如何被重复利用的?引言在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。此时,我们很自然会想到使用线程池来解决这个问题。使用线程池的好处: 降低资源消耗。java中所有的池化技术都有一个好处,就是通过复用