• 线程池


    线程池的好处即将任务的提交与任务的执行解耦开,为一个给定的任务设置执行策略。

    一个执行策略中,包含了以下几点

    1.任务在什么(what)线程中执行

    2.任务按什么(what)顺序执行,先进先出/先进后出/优先级

    3.可以有多少(how many)任务同时执行

    4.可以有多少(how many)进入等待队列

    5.如果放弃某个任务,需要挑选哪个(which)放弃?并且执行放弃策略后,系统如何(how)得知?

    6.在一个任务的执行前后需要做什么(what)处理

    策略没有好坏,具体要根据可用的计算资源和对服务的需求来选择。

    线程池最佳大小为cpu数量×cpu利用率×(1+等待时间/计算时间)

    除了可以定制执行策略以外,线程池的好处还在于线程的回收利用。并且由于请求到达时,线程已经存在,提高了请求的响应性。

    我们可以使用Executors的静态类工厂来产生一个线程池。

    newFixedThreadPool,创建一个定长的线程池,每提交一个任务,增加一条线程直到线程到达最大值。

    newCachedThreadPool,创建一个可缓冲的线程池,如果当前线程池超过了处理的需要,可以灵活收回空闲的线程,当需求增加时,灵活增加新的线程,不对线程长度做限制。

    newSingleThreadExecutor,创建一个单线程的executoe,只创建唯一的工作线程,如果这个线程异常结束,会有另一个代替他。保证任务按照任务队列规定的顺序执行。

    newScheduledThreadPool,创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于timer。

    除了Executors的静态方法创建线程池外,还可以自己定制参数实例化ThreadPoolExecutor。

    参数一共7个,分别是

    coreSize:核心线程池大小

    maxiumSize:最大线程池大小

    keepAlive:线程最大空闲时间

    unit : 时间单位

    workQueue:阻塞队列,分为有界队列,无界队列,同步转移

    threadFactory: 线程池工厂

    handler: 拒绝策略,分为四种1.直接丢弃任务 2.抛出异常 3.丢弃队列里最旧的任务 4.调用者线程运行任务

  • 相关阅读:
    Kth Smallest Element in a BST
    Bitwise AND of Numbers Range
    Happy Number
    Summary Ranges
    linux设置MySQL开机自动启动
    基本PSO算法实现(Java)
    Invert Binary Tree
    Rectangle Area
    Contains Duplicate II
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/scru/p/10730439.html
Copyright © 2020-2023  润新知