多线程线程池的基本创建,使用方法


import java.util.concurrent.*;

/**
 * 多线程线程池的基本创建,使用方法
 *
 * @author silence
 */
public class Silence {
    public static void main(String[] args) {
        //创建一个线程池 最大线程数量20  核心线程15
        //如果提交了超过15 不超过20的任务,会创建临时线程。
        //临时线程超过 60秒会被销毁
        //如果提交任务数量,超过  最大线程数量+排队数量, 会抛出异常
        ThreadPoolExecutor thread = new ThreadPoolExecutor(
                //核心线程
                5,
                //最大线程数量
                10,
                //等待时间
                60,
                //等待时间的单位(秒)
                TimeUnit.SECONDS,
                //阻塞队列,排队的数量
                new ArrayBlockingQueue<>(10),
                //默认线程工厂
                Executors.defaultThreadFactory(),
                //超出任务的拒绝策略
                new ThreadPoolExecutor.AbortPolicy()
        );
        //提交十个线程任务,并让他暂时阻塞在哪里
        for (int i = 0; i < 8; i++) {
            //判断线程池有没有提交满
            while (true) {
                //正在执行的线程数量
                int activeCount = thread.getActiveCount();
                //最大线程数
                int maximumPoolSize = thread.getMaximumPoolSize();
                //如果线程池没满就提交
                //提交线程任务
                if (activeCount < maximumPoolSize) {
                    thread.submit(() -> {
                        System.out.println("线程提交");
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    });
                    break;
                }
            }


        }

        //关闭线程池
        thread.shutdown();

        //线程池关闭后,已提交的线程任务。可以继续执行,但不能提交新任务
        //可以在确定没有线程任务提交之后关闭
      /*  thread.submit(()->{
            System.out.println("55");
        });*/

        //返回正在执行任务的线程的大概数量。
        int activeCount = thread.getActiveCount();
        System.out.println("返回正在执行任务的线程的大概数量:" + activeCount);


        //返回允许的最大线程数。
/*        int maximumPoolSize = thread.getMaximumPoolSize();
        System.out.println("返回允许的最大线程数:" + maximumPoolSize);*/

        //如果所有任务在关闭后完成,则返回 true 。
       /* boolean terminated = thread.isTerminated();
        System.out.println("如果所有任务在关闭后完成,则返回 true:  " + terminated);*/

        //
        BlockingQueue<Runnable> queue = thread.getQueue();
        System.out.println("队列排队的任务个数:" + queue.size());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silence丶你的名字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值