线程池的参数和使用介绍

本文介绍了Java线程池的概念,重点讲解了ThreadPoolExecutor的常用参数,如核心线程数、最大线程数、等待队列和拒绝策略。通过实例展示了线程池如何管理和调度任务,以及不同情况下的行为。
摘要由CSDN通过智能技术生成

java线程池是一种线程复用机制,主要功能是将用户需要执行的任务(Runnable对象或者子类)放到线程池执行,同时可以控制程序占用的内存和CPU资源(相当于设定了资源使用边界,对于在有限资源的设备上是非常鼓励的)。

java线程池的主要使用类是ThreadPoolExecutor,创建这个线程池类有几种常用参数:
corePoolSize – 核心线程数

maximumPoolSize – 最大线程数,最大线程数和核心线程数的差值即为非核心线程数

keepAliveTime – 超过核心线程数的任务最大等待时间

unit – 等待时间的计时单位,毫秒/秒/微秒等

workQueue — 等待队列,可以设置队列类型和大小

RejectedExecutionHandler — 拒绝策略,默认是抛出异常,可以设置为:主线程执行、队首任务丢弃、队尾任务丢弃等

线程池的创建过程:

ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(
            2,
            3,
            0L,
            TimeUnit.MILLISECONDS,
            new ArrayBlockingQueue<Thread>(2){
                @Override
                public boolean offer(Thread thread) {
                    System.out.println(System.nanoTime() + " : " + TAG + " : put thread into queue, name : " + thread.getName());
                    return super.offer(thread);
                }
            }
    );

*其中等待队列使用了ArrayBlockingQueue,指定队列最大长度为2,

-即核心线程数执行满了之后,加入到该队列中,

-如果队列已满,再加入的任务就直接使用非核心线程执行,

-如果加入的任务超过队列最大线程数,则执行拒绝策略。

1,情况1

*加入了4个线程,线程1,2执行执行,线程3,4等待执行

 2,情况2

 *加入了5个线程,线程1,2直接执行,线程3,4等待执行,线程5超过等待队列非核心线程执行

3,情况3

*线程1,2直接执行,线程3,4等待执行,线程5非核心线程执行,线程6执行拒绝策略(默认)抛出异常

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值