精华内容
下载资源
问答
  • 线程池命名

    2020-12-25 16:49:16
    如何优雅的创建线程池并且命名 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class RunFirst { private static ExecutorService service; static { service ...

    如何优雅的用线程池创建线程并且命名


    大家都知道阿里巴巴规范手册说要给线程命名,话不多说直接贴代码

    
    
    import cn.hutool.core.thread.ExecutorBuilder;
    import cn.hutool.core.thread.NamedThreadFactory;
    
    import java.util.concurrent.ThreadPoolExecutor;
    
    public class RunFirst {
        private static ThreadPoolExecutor threadPool = null;
    
        static {
            threadPool = ExecutorBuilder.create()
                    .setCorePoolSize(10)
                    .setMaxPoolSize(20)
                    .setKeepAliveTime(1L, TimeUnit.SECONDS)
                    .useArrayBlockingQueue(100000)
                    .setThreadFactory(new NamedThreadFactory("my-task-", false))
                    .setAllowCoreThreadTimeOut(true)
                    .build();
        }
    
    
        public static void main(String[] args) {
            System.out.println("开始执行");
            int len = 10000000;//1亿次
            for (int i = 0; i < len; i++) {
                int finalI = i;
                threadPool.execute(() -> {
                    System.out.println("当前线程名=" + Thread.currentThread().getName() + "==>工作任务是打印:" + finalI);
                });
                System.out.println("```当前线程名=" + Thread.currentThread().getName() + "==>工作任务是打印:" + finalI);
            }
            System.out.println("执行完毕");
        }
    }
    
    

    最后执行结果是
    执行结果

    我只是在项目中添加了一个hutool-all.jar

    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.5.4</version>
    </dependency>
    

    工具类 https://hutool.cn/docs/#/

    展开全文
  • 工具类-ThreadUtil线程池命名先引入guava依赖定义工具类使用工具类命名各个线程 线程池命名可以方便以后排查问题,根据线程就知道哪个业务逻辑出了问题。 先引入guava依赖 <dependency> <groupId>...

    线程池命名可以方便以后排查问题,根据线程就知道哪个业务逻辑出了问题。

    先引入guava依赖

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>20.0</version>
    </dependency>
    

    定义工具类

    import com.google.common.util.concurrent.ThreadFactoryBuilder;
    import java.util.concurrent.ThreadFactory;
    
    public class ThreadUtil {
    
        public static ThreadFactory reNameThread(String name, boolean daemon) {
            return new ThreadFactoryBuilder()
                    .setNameFormat(name + "--%d").setDaemon(daemon)
                    .build();
        }
    
        public static ThreadFactory reNameThread(String name) {
            return reNameThread(name, false);
        }
    }
    

    使用工具类命名各个线程

    @Slf4j
    @Configuration
    public class ThreadPoolConfig {
    
        /**
         * 
         * @return
         */
        @Bean("sendIscPool")
        public ThreadPoolExecutor sendIscPool(){
           return  new ThreadPoolExecutor(3,20,1, TimeUnit.MINUTES,new LinkedBlockingQueue<>(1024)
                   , ThreadUtil.reNameThread("发送数据到社区")
                   , (task,executor)->{
                try {
                    executor.getQueue().put(task);
                } catch (InterruptedException e) {
                    log.error("",e);
                }
            });
        }
    }
    
    展开全文
  • 线程池命名工具类

    2017-11-23 14:36:18
    功能 按照“PoolName-thread-n”的格式命名线程池中的线程;示例代码import java.util.concurrent.ThreadFactory;... * 类说明:线程池命名工具类 * * @author ruipeng.lrp * @since 2017/11/23

    功能

      按照“PoolName-thread-n”的格式命名线程池中的线程;

    示例代码

    import java.util.concurrent.ThreadFactory;
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * 类说明:线程池命名工具类
     * 
     * @author ruipeng.lrp
     * @since 2017/11/23
     * 
     **/
    public class NamedThreadFactory implements ThreadFactory {
    
        private final AtomicInteger threadNumber = new AtomicInteger(1);
        private String poolName;
        private boolean isDaemon;
    
        public NamedThreadFactory() {
            this("Pool");
        }
    
        public NamedThreadFactory(String poolName) {
            this(poolName, true);
        }
    
        public NamedThreadFactory(String poolName, boolean isDaemon) {
            this.poolName = poolName;
            this.isDaemon = isDaemon;
        }
    
        @Override
        public Thread newThread(Runnable r) {
            Thread t = new Thread();
            //线程名称:PoolName-thread-n
            t.setName(this.poolName + "-thread-" + threadNumber.getAndIncrement());
            t.setDaemon(isDaemon);
            return t;
        }
    
    }
    展开全文
  • 线程池命名问题

    千次阅读 2016-07-28 20:47:15
    在这种情况下,线程池会给线程自定义命名,如果想改变线程的名称,那么需要在线程中的run方法中给线程setName 如下: public class MyThread extends Thread{ public String threadName; public MyThread

    ThreadPoolManager.potatoPool.execute(new MyThread());

    在这种情况下,线程池会给线程自定义命名,如果想改变线程的名称,那么需要在线程中的run方法中给线程setName

    如下:

    public class MyThread extends Thread{
    	public String threadName;
    	public MyThread (String threadName){
    		this.threadName=threadName;
    	}
    	@Override
    	public void run() {
    		Thread.currentThread().setName(threadName);
    	}
    
    }
    

    ThreadPoolManager.potatoPool.execute(new MyThread("aa"));
    这样就可以根据自己的需要给线程自定义名称了。

    展开全文
  • 线程池---友好的线程池命名

    千次阅读 2018-12-17 14:20:06
    之前介绍过java 推荐的线程池和如何自定义线程池 https://mp.csdn.net/postedit/81783309 今天在使用线程池的时候发现线程池名字实在是太丑了 是这样的 pool-1-thread-1 这样不好看也没有什么意义,假如在线程里...
  • 如何给线程池命名

    千次阅读 2015-07-19 17:20:56
     在系统运行后,在线程快照里总是看到线程池的名字为pool-xx,这样导致很不好定位,怎么给线程池一个有意义的名字呢。参照ThreadPoolExecutor类的ThreadFactory,自己实现ThreadFactory接口,重写newThread方法即可...
  • 线程池

    2019-11-07 12:39:16
    线程池 文章目录线程池0.线程池优点(⭐)1.线程池各种接口框架:2.线程池的执行原理3.如何创建一个线程池4.向线程池中提交任务1.用execute()方法提交,没有返回值2.用submit()方法提交任务,带有返回值5.线程池...
  • 转储正在运行的JVM的线程时或在调试过程中,默认线程池命名方案为 pool-N-thread-M,其中 N 代表池序列号(每次创建新线程池时,全局 N 计数器都会增加),并且 M 是池中的线程序列号。 例如, pool-2-thread-3 意味...
  • @Async异步线程池以及线程的命名

    万次阅读 2018-08-25 17:08:18
    本文记录@Async的基本使用以及通过实现ThreadFactory来实现对线程的命名。   @Async的基本使用   近日有一个道友提出到一个问题,大意如下: 业务场景需要进行批量更新,已有数据id主键、更新的状态。单条...
  • 线程池命名工厂类 public class NamedThreadFactory implements ThreadFactory { private final AtomicInteger mThreadNum = new AtomicInteger(1); private final String mPrefix; private final bool...
  • Java线程池详解

    万次阅读 多人点赞 2018-04-08 19:07:23
    为什么需要使用线程池线程池的创建及重要参数 springboot中使用线程池 1.为什么需要线程池? java中经常需要用到多线程来处理一些业务,我们非常不建议单纯使用继承Thread或者实现Runnable接口的方式来创建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,753
精华内容 13,101
关键字:

线程池命名