zoukankan      html  css  js  c++  java
  • 线程池

    创建线程池:

    newCachedThreadPool-----》创建一个可缓存线程池,如果线程池长度超过需要处理需要,克灵活回收空线程,若无可回收,则新建线程。

    newFixedThreadPool------>创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

    newSchedulThreadPool----》创建一个定长线程池,支持定时及周期性任务执行。

    newSingleThreadExecutor----->创建一个单线程化的线程池,它会只用唯一的工作线程来执行任务,保证所有任务按照指定顺序FIFO、LIFO,优先级执行。

    Executors各个方法的弊端:

    1)newFixedThreadPool和newSingleThreadExecutor:

    主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。

    2)newCachedThreadPool和newScheduledThreadPool:

    主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至OOM。

     

    corePoolSize & maximumPoolSize

    当一个新任务被提交到池中,如果当前运行线程小于核心线程数(corePoolSize),即使当前有空闲线程,也会新建一个线程来处理新提交的任务;如果当前运行线程数大于核心线程数(corePoolSize)并小于最大线程数(maximumPoolSize),只有当等待队列已满的情况下才会新建线程。

    等待队列

    任何阻塞队列(BlockingQueue)都可以用来转移或保存提交的任务,线程池大小和阻塞队列相互约束线程池:

    1. 如果运行线程数小于corePoolSize,提交新任务时就会新建一个线程来运行;

    2. 如果运行线程数大于或等于corePoolSize,新提交的任务就会入列等待;如果队列已满,并且运行线程数小于maximumPoolSize,也将会新建一个线程来运行;

    3. 如果线程数大于maximumPoolSize,新提交的任务将会根据拒绝策略来处理。

  • 相关阅读:
    使用select和shutdown
    SMTP协议初探(二)linux下c编程实现发邮件
    ortp使用详解 ortprelease.pdf
    网易校园招聘c++题目如何让new操作符不分配内存,只调用构造函数
    虚拟地址空间,堆栈,堆,数据段,代码段
    关于double的输入输出
    CodeForces1238DABstring CodeForces思维+字符串反向思考
    CodeForces1234CPipesdfs
    CodeForces1221A2048 Game思维题
    排序
  • 原文地址:https://www.cnblogs.com/KL2016/p/14661308.html
Copyright © 2011-2022 走看看