源码解读Java线程池运行核心原理

本文详细介绍了Java线程池的运行核心原理,包括通过ThreadPoolExecutor和Executors创建线程池的方法。讲解了ThreadPoolExecutor构造函数中的关键参数,如核心线程数、最大线程数、存活时间等,并探讨了线程池的拒绝策略。同时,阐述了execute()方法的工作流程,以及Executors提供的四种线程池类型。
摘要由CSDN通过智能技术生成

概要

在日常开发中,肯定避免不了使用多线程。线程池是创建执行线程非常推荐的方式。至于为啥,我就引用《Java并发编程艺术》中的话。

  1. 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  2. 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  3. 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源, 还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控

线程池创建的两种方式

ThreadPoolExecutor的方式
解释:new ThreadPoolExecutor()方式是阿里推荐创建线程池的方式,具体原因我们后面会利用源码会进一步讲解。还  
有一种方式就是利用Executors去创建线程池,底层还ThreadPoolExecutord的方式,所以先讲解ThreadPoolExecutor.....
 public static void main(String[] args) {
   
        ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(
                    10,20,1000,TimeUnit.MILLISECONDS,new LinkedBlockingDeque<>() 
                    );
        for (int i = 1; i <= 10 ; i++) {
   
            Thread t = new Thread(()->{
   
                String name = Thread.currentThread().getName();
                System.out.println(name+":Running.....");
            },"t"+i);
            threadPoolExecutor.execute(t);
        }
        threadPoolExecutor.shutdown();
    }
运行结果 如下:   pool-1-thread-1:Running.....
                pool-1-thread-2:Running.....
                pool-1-thread-4:Running.....
                pool-1-thread-3:Running.....
                pool-1-thread-5:Running.....
				pool-1-thread-6:Running.....
				pool-1-thread-7:Running.....
				pool-1-thread-8:Running.....
				pool-1-thread-9:Running.....
				pool-1-thread-10:Running.....

目前线程已经成功的启动了,但是脑袋还可能是一头雾水,那些ThreadPoolExecutor中的参数到底是啥玩意啊?其实这才是重点。

ThreadPoolExecutor构造函数
 由于ThreadPoolExecutor的构造函数有很多,由于篇幅原因,就不用多copy了,我把最主要的贴在下面, 
 其他的构造方 法也是调用如下..
/**
     * Creates a new {@code ThreadPoolExecutor} with the given initial
     * parameters.
     *
     * @param corePoolSize 核心线程数,也就是线程池中运行线程数的最大值
     * @param maximumPoolSize 线程池最大的容量
     * @param keepAliveTime  当线程数大于核心时,这是多余的空闲线程在终止之前等待新任务的最长时间。
     * @param unit 时间的单位是啥
     * @param workQueue 保留任务的队列
     * @param threadFactory 执行者使用的工厂
     * @param handler 达到了线程界限和队列容量就会执行被阻塞时的拒绝策略
     * @throws IllegalArgumentException if one of the following holds:<br>
     *         {@code corePoolSize < 0}<br>
     *         {@code keepAliveTime < 0}<br>
     *         {@code maximumPoolSize <= 0}<br>
     *         {@code maximumPoolSize < corePoolSize}
     * @throws NullPointerException if {@code workQueue}
     *         or {@code threadFactory} or {@code handler} is null
     */
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
   
        if (corePoolSize < 0 ||  //进行参数的验证
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
            //赋值默认值
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值