线程池ThreadPool知识点汇总

原文:https://www.jianshu.com/p/0e4a5e70bf0e

1.定义:缓存了一定线程数量的区域

2.作用:a.复用线程,减少性能开销

              b.管理线程,统一分配、调优&监控线程,控制线程池的最大并发量

3.优点:a.降低因线程的创建&销毁带来的性能开销(重用缓存在线程池的线程)

              b.提高线程的响应速度&执行效率(重用线程,不需创建即可执行线程 / 管理线程,优化线程的执行顺序)

              c.提高对线程的管理度

4.传统的多线程方式(继承Thread类或实现Runnable接口):a.每次创建/销毁线程对象都会消耗资源且响应速度慢

                                                                                              b.线程缺少同一管理,容易出现阻塞现象

5.ThreadPool的核心参数

    上述6个参数的配置 决定了 线程池的功能,ThreadPoolExecutor类 = 线程池的真正实现类

    开发者可根据不同需求 配置核心参数,从而实现自定义线程池

6.ThreadPool运行时的工作逻辑

7.ThreadPool的使用流程:

  • 创建线程池:ThreadPoolExecutor executor = new TheadPoolExecutor(int corePoolSize, int maxmumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable workQueue>, ThreadFactory threadFactory);
  • 向线程池提交任务:execute(),传入Runnable对象  ----> executor.execute(new Runnable(){})
  • 关闭线程池:threadpool.shutdown()。关闭线程池的原理:遍历线程池所有线程,逐个线程调用interrupt()中断线程

8.常见的4类功能线程池

    a.定长线程池(FixedThreadPool):

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

           特点:只有核心线程 & 不会被回收、线程数量固定、任务队列无大小限制(超出的线程任务会在队列中等待)

           应用场景:控制线程最大并发数

    b.定时线程池(ScheduledThreadPool): 

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);

           特点:核心线程数量固定、非核心线程数量无限制(闲置时马上回收)

           应用场景:执行定时 / 周期性 任务

    c.可缓存线程池(CachedThreadPool):

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

           特点:只有非核心线程、线程数量不固定(可无限大)、灵活回收空闲线程(具备超时机制,全部回收时几乎不占系统资源)、新建线程(无线程可用时) / 任何线程任务到来都会立刻执行,不需要等待

           应用场景:执行大量、耗时少的线程任务

    d.单线程化线程池(SingleThreadExecutor):

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

           特点:只有一个核心线程(保证所有任务按照指定顺序在一个线程中执行,不需要处理线程同步的问题)

           应用场景:不适合并发但可能引起IO阻塞性及影响UI线程响应的操作,如数据库操作,文件操作等

    f.四类功能线程池的对比:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值