美文网首页
2020-08-09

2020-08-09

作者: 爺珍爱那颗心 | 来源:发表于2020-08-09 09:52 被阅读0次

    * 又是加班的一天

    * # 什么是线程池

    * 把线程进行池化,调用的时候直接去池里面去取,而不是每次去重新创建,不用的时候放回线程池,而不是直接销毁,从而达到复用。

    # 为什么使用线程池

    * ①复用线程,降低创建以及销毁导致的资源消耗。

    * ②提高响应速度。

    * ③提高线程的可管理性,提升系统稳定性。

    # ThreadPoolExecutor 

    JDK提供的线程池

    ThreadPoolExecutor的构造方法有七个参数

    * int corePoolSize`核心线程数`

    * int maximumPoolSize`约定的线程最大数量`

    * long keepAliveTime`线程空闲的时候存活多久(但会保留核心线程数的线程数量)`

    * TimeUnit unit`时间单位`

    * BlockingQueue<Runnable>workQueue`线程超过核心线程数的部分放到阻塞队列中`

    * ThreadFactory threadFactory`线程工厂主要是给线程命名`

    * RejectedExecutionHandler handler`拒绝策略`

    # 缺省策略

    RejectedExecutionHandler是一个接口,JDK提供了四种实现,如果都不合适,可以自己实现这个接口去处理。

    * DiscardOldestPolicy`最早放入的先丢弃`

    * AbortPolicy`直接抛出异常,也是默认的策略`

    * CallerRunsPolicy`谁提交的谁执行`

    * DiscardPolicy`直接丢弃`

    # 合理配置线程池

    任务的特性有关

    * CPU密集型  (大量计算型任务)不要超过机器上CPU同时运行的线程个数

    * IO密集型  (文件读写)2*CPU的个数(常见配置)

    * 混合型  尽量进行拆分

    相关文章

      网友评论

          本文标题:2020-08-09

          本文链接:https://www.haomeiwen.com/subject/kbhldktx.html