2 injavawetrust InJavaWeTrust 于 2016.03.25 09:35 提问

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

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

5个回答

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);
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 知道 什么 是线程池吗
一年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!