线程池理解

作者: Sum_Day | 来源:发表于2019-04-17 10:07 被阅读0次

    我的Github地址

    有问题直接留言或 联系QQ:1079569023


    Thread线程

    1. Linux:一个进程:1000个Thread限制
    2. Windows:20000个Thread

    ThradPoolExecutor

    1. corePoolSize:核心线程数,缓存的线程数量
    2. maximumPoolSize: 10
    BlockingQueue到达最大容量后,可以添加的任务数量 
    
    10:用来在增加5个线程来执行任务,最多存在10个线程
    
    1. keepAliveTime:
    任务数量减少后,只会杀掉maximumPoolSize定义多出来的几个线程,不会杀掉核心线程数
    
    1. BlockingQueue:到达核心线程数后,任务存放点
    阻塞队列:先进先出,队列满的时候,放任务的线程会被阻塞
    
    1.add,remove->add满的时候,直接抛异常
    2.offer,pull->add满的时候,不抛异常
    3.put,take ->会阻塞调用线程,主要是用这个
    
    Android常用2个阻塞对列
    LinkedBlockingQueue/ArrayBlockingQueue
    
    1. RejectedExecutionHandler:任务超出BlockingQueue+maximumPoolSize 后,执行的拒绝策略
    1.抛弃最早的任务
    2.直接抛出异常(AbortPolicy默认参数)
    3.原线程执行
    4.直接抛弃
    

    6.合理配置线程池

    1.CPU密集型:线程池个数不要超过系统CPU核心数
    Runtime.getRuntime.availableProessors
    
    2.IO密集型:无法确定IO操作数量
    缺省默认是:2*CPU个数
    
    3.参考Android中的AsyncTask
    

    相关文章

      网友评论

        本文标题:线程池理解

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