问题描述
- java 线程池中如何自定义每个线程名称
-
**java 线程池中如何自定义每个线程名称
java 线程池中如何自定义每个线程名称
**
解决方案
补充下,线程池的创建线程池对象时,有一个参数是ThreadFactory类型,如果不传递,默认用的是DefaultFactory,我们可以自定义一个ThreadFactory然后作为参数传到进去,这个类里面就可以自定义线程池中创建的线程的名称。api:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory);
解决方案二:
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个任务,可以看到线程池中线程的名称的规律了。
解决方案三:
@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();
}
解决方案四:
java自定义线程池
自定义java 线程池
java 自定义线程池
解决方案五:
参考
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());
}
};