简单点讲讲手动创建线程池

一、创建线程池时需要指定一个有意义的名字,否则出问题的时候就会难以定位。

ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
以上demo-pool-%d即为创建的线程名称,测试代码如下:
public class Test {
    public static void main(String[] args) {
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
        ExecutorService executorService = new ThreadPoolExecutor(10, 20, 200L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), namedThreadFactory);
        try {
            executorService.execute(() -> {
                try {
                    Thread.sleep(1000);
                    System.out.println("线程名称:" +                     Thread.currentThread().getName() );
                    throw new NullPointerException();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        } catch (Exception e) {
            System.out.println("报错了" +e);
        } finally {
            //关闭
            executorService.shutdown();
        }
    }
}
输出错误日志

Exception in thread "demo-pool-0" java.lang.NullPointerException

这里的demo-pool-0就是上面创建线程池时命名的名称。

二、创建线程池参数说明

1、corePoolSize : 线程池核心池的大小。

2、maximumPoolSize : 线程池的最大线程数。

3、keepAliveTime : 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间(空闲线程存活时间)。

4、unit : keepAliveTime 的时间单位。

5、workQueue : 存放提交但未执行任务的队列。

6、threadFactory : 创建线程的工厂类。

7、handler  等待队列满后的拒绝策略。

ExecutorService executorService = new ThreadPoolExecutor(10, 20, 200L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), namedThreadFactory);

三、创建线程池处理业务

public class Test {
    public static void main(String[] args) {
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
        ExecutorService executorService = new ThreadPoolExecutor(10, 20, 200L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), namedThreadFactory);
        try {
            executorService.execute(() -> {
                try {
                    Thread.sleep(1000);
                    // 这里处理你的业务
                    System.out.println("balabalabalalalalalalala");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        } catch (Exception e) {
            System.out.println("报错了" +e);
        } finally {
            //关闭
            executorService.shutdown();
        }
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值