zoukankan      html  css  js  c++  java
  • 线程池(1)-参数

    1.为什么要用线程池

    阿里巴巴开发规范中这样写

    线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 
    说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资
    源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者 “过度切换”的问题。 

    简单理解就是,1系统资源有限,显示创建不利于控制创建的线程数,导致资源消耗完了,系统崩溃。2线程池频繁创建,销毁,还不如创建一批线程池复用线程池。

    2.线程池参数

    public ThreadPoolExecutor(int corePoolSize,
                                  int maximumPoolSize,
                                  long keepAliveTime,
                                  TimeUnit unit,
                                  BlockingQueue<Runnable> workQueue,
                                  ThreadFactory threadFactory,
                                  RejectedExecutionHandler handler) {

    线程池构造函数一共7个参数:

    corePoolSize:核心线程数量

    maximumPoolSize:最大线程数量

    workQueue:等待队列,当任务提交时,如果线程池中的线程数量大于等于corePoolSize的时候,把该任务封装成一个Worker对象放入等待队列

    keepAliveTime:

    线程池维护线程所允许的空闲时间。当线程池中的线程数量大于corePoolSize的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了keepAliveTime

    TimeUnit:时间级别

    threadFactory:创建新线程

    handler:它是RejectedExecutionHandler类型的变量,表示线程池的饱和策略。如果阻塞队列满了并且没有空闲的线程,这时如果继续提交任务,就需要采取一种策略处理该任务

    3.通俗理解

    如果把线程池的使用比作工厂生成包子,核心线程池相当于正式员工;最大线程池相当于员工总数,员工总数=正式员工+临时工;等待队列相当于包子订单超过正式员工生产速度,需要等待正式员工处理;如果需要处理的订单等待队列放不下了,则聘请临时工来处理;如果聘请了临时工,临时工没有活干可以辞退。怎么判断是否辞退,那么就看允许零时工空闲的时间;创建新线程相当于有新员工入职,办理入职手续,例如:分配工号;饱和策略相当于正式工零时工都有活干了,但是还有包子要生成,这个时候应该怎么处理。

    还是正式员工好,没有活干也不会被辞退。

  • 相关阅读:
    servlet容器与web容器的概念
    apache点NET环境
    JAVA web选型
    Web服务器排行:Nginx超越Apache 成为全球
    软件介绍(apache lighttpd nginx)
    C++性能榨汁机之虚函数的开销
    C++性能榨汁机之伪共享
    《四重缘起深般若》 和 《心经修正圆通法门》
    冥想方法
    中医方子
  • 原文地址:https://www.cnblogs.com/SmilingEye/p/11750975.html
Copyright © 2011-2022 走看看