zoukankan      html  css  js  c++  java
  • 知识树——线程池

    1 线程池的大小设置
    int N_CPU = Runtime.getRuntime().availableProcessors();
    int U_CPU = 期望的CPU利用率,如0.9;
    int W = 等待时间;
    int C = 计算时间;
    N_THREAD = N_CPU * U_CPU * (1 + W/C)
    (计算密集型时一般使用N_CPU+1 )
     
    2 java.util.concurrent.ThreadPoolExecutor实现
     
    2.1 execute方法
    当工作线程数小于corePoolSize时,创建新的工作线程并执行任务;否则将任务加入到workQueue中。
    将任务加入到workQueue中时,如workQueue已满则创建新的工作线程并执行任务;如果线程数已达maximumPoolSize则创建新线程失败,任务被reject。
     
    2.2 工作线程(Worker)
    获取初始任务或调用getTask方法获取任务,执行任务的run方法,当获取不到任务时线程自然终结。
     
    2.3 getTask方法
    从workQueue中获取任务,如获取不到则等待keepAliveTime的时间。如线程数是否小于等于corePoolSize则无期限等待(可以配置allowCoreThreadTimeOut以改变此行为)。
     
    3 队列比较
     
    3.1 LinkedBlockingQueue
     
    3.2 ArrayBlockingQueue
     
    3.3 PriorityBlockingQueue
    按优先级排序。
     
    3.4 SynchronousQueue
    没有存储功能,总有消费者准备好获取任务时适用。
     
    4 线程池比较
     
    4.1 CachedThreadPool
    无界、SynchronousQueue。
     
    4.2 FixedThreadPool
    corePoolSize==maximumPoolSize、LinkedBlockingQueue。
     
    4.3 ScheduledThreadPool
    定时执行。
     
    4.4 SingleThreadExecutor
    nThreads为1的FixedThreadPool
  • 相关阅读:
    [转] websocket新版协议分析+python实现 & websocket 通信协议
    [转] html5演示
    新浪网内部讲师进阶研习会之笔记
    css3 animation属性
    【转】python多线程编程
    搭建selenium自动化环境步骤
    win10下搭建QTP测试环境
    cocos2dx跨平台环境
    Cocos2dx运行win32工程
    原型模式(prototype)
  • 原文地址:https://www.cnblogs.com/chanedi/p/4874438.html
Copyright © 2011-2022 走看看