JUC---线程池

线程池必须掌握的内容:三大方法、7大参数、4种拒绝策略

程序的运行的本质:占用系统的资源,所以要优化资源的使用,所以演化出一种策略,池化技术。

线程池、连接池、内存池、对象池。。。。。创建和销毁非常浪费资源

池化技术:事先准备好一些资源,有人要用,就从这里拿,用完之后还回来。

        默认大小:2

线程池的好处:

        1)降低资源的消耗

        2)提高响应的速度

        3)方便管理

线程复用、可以控制最大并发数,管理线程

线程池的三大方法:

1、Executors.newSingleThreadExecutor(); //创建单个线程池

2、Executors.newFixedThreadPool(6); //创建一个大小固定的线程池,比如创建6个线程-->则该线程池最高可以有6个并发,最多可以有6个线程同时执行

3、Executors.newCachedThreadPool(); //可伸缩的线程池

注意:使用了线程池之后,要使用线程池来创建线程

           线程池用完,程序结束,需要关闭线程池

        线程池不允许使用Executors创建,而是通过ThreadPoolExecutor的方式

Executors返回的线程池对象的弊端:

1)FixedThreadPool和SingleThreadPool:允许的请求队列长度为Integer.MAX_VALUE(约为21亿),可能会堆积大量的请求,从而导致OOM

2)CachedThreadPool和ScheduledThreadPool:允许创建的线程数量为nteger.MAX_VALUE(约为21亿)可能会创建大量的线程,从而导致OOM

线程池的7大参数:

public ThreadPoolExecutor(int corePoolSize,//核心线程池大小
                          int maximumPoolSize,//最大核心线程池大小
                          long keepAliveTime,//超时了,没有人调用就会释放
                          TimeUnit unit,//超时时间的单位
                          BlockingQueue<Runnable> workQueue,//阻塞队列
                          ThreadFactory threadFactory,//线程工厂,创建线程的,一般不用动
                          RejectedExecutionHandler handler//拒绝策略
                        ){}

4种拒绝策略:

new ThreadPoolExecutor.AbortPolicy()//线程池满了,还有线程进来,不处理该线程,抛出异常
new ThreadPoolExecutor.CallerRunsPolicy()//哪里来的去哪里
new ThreadPoolExecutor.DiscardPolicy()//队列满了,丢掉任务,不会抛出异常
new ThreadPoolExecutor.DiscardOldestPolicy()//队列满了,尝试和最早的竞争,不会抛出异常

小结和拓展:

1、池的最大大小(最大线程)应该如何设置:(了解---用于调优的)

        1)CPU密集型:几核就是几,可以保持CPU的效率最高

//获取CPU 的核数
Runtime.getRuntime().availableProcessors();//该数值作为最大线程数

        2)IO 密集型:程序中十分耗IO的线程的个数*2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值