线程进阶篇3:new ThreadPoolExecutor()方式创建线程池--线程池的概念、创建方式、参数使用场景--Runnable、Callable(超详细)

目录

1、什么是线程池,作用是什么?

2、生活举例

3、要记住的几个参数概念

4、代码演示,以及线程池参数说明--Runnable

4.1、不指定线程池的任务队列大小的例子

4.2、我们刚刚提到的临时线程数,那到底什么时候创建临时线程呢?

4.3、什么时候会开始拒绝新的任务?

4.4、任务拒绝策略的四个参数的使用:

5、Callable方式创建线程池获取返回值

6、线程池的关闭


1、什么是线程池,作用是什么?

线程池就是一个池子,里面放置着线程和任务。
如果不使用线程池,则每进来一个任务都会创建一个线程,进来一百万个任务就会创建一百万个线程池,这样会非常的消耗资源,线程池的作用可以设置创建线程的数量,让线程只创建一次,让这些线程创建好的线程重复去处理任务,不需要重新创建。

2、生活举例

一家餐厅有1000个顾客,服务员就是线程,顾客就是任务。我们不需要招聘1000个服务员,我们只需要3个服务员,让顾客排队,服务员服务完一个客户接着去服务下一个就好了,大大降低了资源的消耗。

3、要记住的几个参数概念

以餐厅为例

1、核心线程--->  餐厅正式工    招3个

2、最大线程(核心线程 + 临时线程)-->  最多招几个人   最多招5个人,即3个正式工+ 2个临时工

3、临时线程的存活时间 -->临时工多久被开除   来帮忙2天就被开除

4、临时线程的存货时间单位(时、分、秒)--->天

5、指定线程池的任务队列    ---> 顾客在门口排队的地方的大小  (可以指定只能排队几个人,也可以不指定,即来者不拒,等着就行)

6、指定线程池的线程工厂,为线程池创建线程的  --->负责招聘员工的hr(可以直接用已有的工厂)

7、指定线程池的任务拒绝策略()--->顾客太多,忙不过来怎么处理(4种方式)

4、代码演示,以及线程池参数说明--Runnable

4.1、不指定线程池的任务队列大小的例子

import java.util.concurrent.*;

    //线程池案例
    public class ThreadPoolNow {

        public static void main(String[] args) {
            ExecutorService pool = new ThreadPoolExecutor(3, 5, 8,
                    TimeUnit.SECONDS,
                    new LinkedBlockingDeque<>(),  // 这个表示不限制任务,来者不拒
                    Executors.defaultThreadFactory(),  //线程工厂,为线程池创建线程的,获取一个默认的线程池工厂
                    new ThreadPoolExecutor.AbortPolicy()  //表示新任务过来我们没有办法去处理,这个写法会抛出异常。一共4种情况,下面会讲解
            );
            Runnable runnable = new MyThread();
            pool.execute(runnable);
            pool.execute(runnable);
            pool.execute(runnable);
        }

    }

    class MyThread implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + "线程池测试");
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值