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

问题描述

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());
    }
};
时间: 2024-11-02 23:13:01

java 线程池中如何自定义每个线程名称的相关文章

java web应用中新起一个线程 在线程中怎么获取系统登录的数据

问题描述 java web应用中新起一个线程 在线程中怎么获取系统登录的数据 java web应用中新起一个线程 在线程中怎么获取系统登录的数据,系统登录用的是Spring Secrity 解决方案 可以使用缓存,自己写一个缓存类.或者使用Redis.

executor-关于线程池中get()的疑问

问题描述 关于线程池中get()的疑问 如果我的文件夹下共有五个空文件,2个txt文档,那么会产生6个线程,但是为什么在下面代码中count只出现了5次?每个线程都会运行到这段代码的啊. for (Future<Integer> futureItem : results) { count += futureItem.get(); System.out.println("count出现了一次"); } 运行结果如下: 代码如下: public class ThreadPool

《C#多线程编程实战(原书第2版)》——3.6 在线程池中使用等待事件处理器及超时

3.6 在线程池中使用等待事件处理器及超时 本节将描述如何在线程池中对操作实现超时,以及如何在线程池中正确地等待. 3.6.1 准备工作 为了学习本节,你需要安装Visual Studio 2015.除此之外无需其他准备.本节的源代码放置在BookSamples\Chapter3\Recipe5目录中. 3.6.2 实现方式 请执行以下步骤来了解在线程池中实现超时及正确的等待: 1.启动Visual Studio 2015.新建一个C#控制台应用程序项目. 2.在Program.cs文件中加入以

《C#多线程编程实战(原书第2版)》——3.2 在线程池中调用委托

3.2 在线程池中调用委托 本节将展示在线程池中如何异步的执行委托.另外,我们将讨论一个叫做异步编程模型(Asynchronous Programming Model,简称APM)的方式,这是.NET历史中第一个异步编程模式. 3.2.1 准备工作 为了学习本节,你需要安装Visual Studio 2015.除此之外无需其他准备.本节的源代码放置在BookSamples\Chapter3\Recipe1目录中. 3.2.2 实现方式 请执行以下步骤来了解如何在线程池中调用委托: 1.启动Vis

线程池可以执行不同的线程类吗

问题描述 线程池可以执行不同的线程类吗? newFixedThreadPool如代码:ExecutorService pool = Executors.newFixedThreadPool(2);pool.execute(new A));pool.execute(new b));A B 线程类 执行不同的任务,用同一个线程池 这样可以吗?如果可以为什么?本人担心的是 如果A线程正在执行,还有A业务请求上来 线程池会不会分个B线程来处理A业务啊? 解决方案 肯定可以啊,这些线程会加入到线程队列中去

如何等待java线程池中所有任务完成

一.等待线程池所有线程完成: 有时候我们需要等待java thread pool中所有任务完成后再做某些操作,如想要等待所有任务完成,仅需调用threadPool.awaitTermination()方法即可,请查看如下代码: ExecutorService threadPool = Executors.newFixedThreadPool(ConfigUtil.ACCESSDB_THREAD_POOL_SIZE); for(String key:noneExsitKeys){ Concurre

如何结束线程池中的线程.

问题描述 我创建了一个线程调用scheduleAtFixedRate()方法Executors.newScheduledThreadPool(1).scheduleAtFixedRate(newRunnable(),1,1,TimeUnit.SECONDS);如果把它结束掉? 解决方案 解决方案二:每个线程都有ID标示遍历线程池找到对应线程把它destroy了

java-多线程编程中,2个线程同时调用一个存储过程…………

问题描述 多线程编程中,2个线程同时调用一个存储过程---- 最近自学的时候遇到了这么一个问题-- 要求是这样的: 1.在数据库中新建一个用户状态表.里面包含2个字段.user_status(userid bigint,status int) userid为自增. status默认为0; 插入1000条记录. 2.写一个存储过程,从user_status表中获取一条status=0的userid字段的值,取出userid时,需要同时把这条记录对应的status从0修改为1. 3.开启2个线程,在

c# 如何暂停线程池正在运行的所有线程,需要的时候再恢复?

问题描述 如果线程池做不到,用什么办法可以做到?我需要一个主线程调度,一些子线程工作,在特定的情况下,需要把所有的正在工作的子线程暂停,执行一个函数再继续,请问什么样的办法可以实现? 解决方案 解决方案二:线程调度需要自己来实现保存线程的handler,然后设置状态,busy或者freebusy表示工作遍历一下哪些在工作,suspend就可以了解决方案三:usingSystem;usingSystem.Threading;usingSystem.Threading.Tasks;usingSyst