[java进阶]——线程池的使用,自定义线程池

🌈键盘敲烂,年薪30万🌈

目录

一、线程池的存在意义

 二、线程池的使用

2.1线程池的核心原理

2.2线程池的代码实现

三、自定义线程池

3.1线程池的参数详解

3.2线程池的执行原理

3.3灵魂两问

3.4线程池多大合适

3.5拒绝策略


一、线程池的存在意义

系统创建一个线程的成本是比较高的,因为它涉及到与操作系统交互,当程序中需要创建大量生存期很短暂的线程时,频繁的创建和销毁线程对系统的资源消耗有可能大于业务处理是对系统资源的消耗

 二、线程池的使用

2.1线程池的核心原理

创建一个池子,池子是空的

提交任务时,池子会创建线程对象,任务执行完毕,将线程归还给池子,待下一个线程使用

提交任务时,池子中没有空闲线程,也无法创建新的线程,该任务就会排队等待

2.2线程池的代码实现

1.创建线程池

2.提交任务 

3.所有任务执行完毕,关闭线程

public class Test1 {
    public static void main(String[] args) throws InterruptedException {
        //创建线程池
        ExecutorService pool1 = Executors.newCachedThreadPool();
        //创建指定数量的线程池
        ExecutorService pool2 = Executors.newFixedThreadPool(3);
        //提交任务
        pool2.submit(new Myrunable());
        pool2.submit(new Myrunable());
        pool2.submit(new Myrunable());
        pool2.submit(new Myrunable());
        pool2.submit(new Myrunable());
        //销毁线程池
        pool2.shutdown();

        //提交任务
        pool1.submit(new Myrunable());
        Thread.sleep(1000);
        pool1.submit(new Myrunable());
        Thread.sleep(1000);
        pool1.submit(new Myrunable());
        Thread.sleep(1000);
        //销毁线程池
        pool1.shutdown();

    }

三、自定义线程池

java把线程池封装为ThreadPoolExecutor类,利用构造方法创建线程池对象

3.1线程池的参数详解

3.2线程池的执行原理

3.3灵魂两问

一问:先提交的任务一定先被执行吗?

二问:临时线程何时创建?

答:

先提交任务不一定先执行,因为先提交的任务可能在等待队列中等待,而后提交的任务交给临时线程处理

当等待队列已满,创建临时线程

3.4线程池多大合适

CPU密集型的:最大并行数+1

I/O密集型的:最大并行数*cpu期望利用率*总时间/CPU计算时间

//获取虚拟机可获得的线程数

//我的电脑就是4核4线的

int count = Runtime.getRuntime().availableProcessors();

System.out.println(count);

3.5拒绝策略

当线程池中总线程数都在使用且等候队列也已满,触发拒绝策略

📕总结

以上就是学习线程池的相关内容,欢迎批评指正

  • 76
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 71
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会就选C.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值