多线程学习笔记(1)——线程池的创建

本文介绍如何避免使用Executors创建线程池,转而使用ThreadPoolExecutor进行定制,以规避资源耗尽风险。通过示例代码展示如何设置核心参数,如线程数、队列大小等,确保线程池稳定高效运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习线程池,一开始用Executors.newFixedThreadPool来创建线程池,但是阿里巴巴的代码规约插件提示不要这怎么写。于事就研究了一下怎么创建定制的线程池:
相关参考链接:
线程池创建
多线程编程学习五(线程池的创建)
Java Code Examples for com.google.common.util.concurrent.ThreadFactoryBuilder

阿里巴巴创建线程池规约:线程池不允许通过Executors创建,而是通过ThreadPoolExecutor的方式,这样的处理方式能更加明确线程池的运行规则,规避资源耗尽的风险。

  1. newFixedThreadPool(n)和newSingleThreadExecutor():主要问题是堆积的请求处理队列可能会耗费非常大的内存
  2. newCachedThreadPool()和newScheduledThreadPool(n):主要问题是线程最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,耗费内存资源。

示例实现方式:

package com.fuqi.newcreatemethods;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.*;

/**
 * @Description: 创建线程的方式四:使用线程池
 * @Author 傅琦
 * @Date 2019/6/15 16:25
 * @Version V1.0
 */
public class ThreadPoolLearn1 {
    public static void main(String[] args) {
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();

        ExecutorService executorService = new ThreadPoolExecutor(5, 10, 2000L ,TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());

        // execute方法适合用于实现了Runnable接口的类
        executorService.execute(new NumberThread());
        executorService.execute(new NumberThread());

        executorService.shutdown();
    }
}

class NumberThread implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 101; i++) {
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ": " + i);
            }
        }
    }
}

说明:

  1. 所用到的ThreadFactoryBuilder是com.google.guava包里的ThreadFactory构建类,要用的话,需要在引入相应的包。这里再maven工程中导入相应的依赖:
<dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>18.0</version>
</dependency>
  1. ThreadPoolExecutor中的构造器的参数详解可参见如下链接(具体内容以后再整理):
    java线程池01-ThreadPoolExecutor构造方法参数的使用规则
    ThreadPoolExecutor 参数详解
    ThreadPoolExecutor中的参数详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值