zoukankan      html  css  js  c++  java
  • ThreadPoolExecutor和Executors的区别

    Executors创建的线程有两类

    • newFixedThreadPool和newSingleThreadExecutor,队列数量弹性,创建的线程的队列最大值为INTEGER.max容易造成OOM
    • newCachedThreadPool和newScheduledThreadPool,线程数量弹性,创建的线程数量最大值为INTEGER.max容易造成OOM

    ThreadPoolExecutor的构造方法参数

    可以定制你需要的线程池参数:

    • corepoolsize 最小线程数,一般设置为服务器核心数量
    • maxpoolsiz 最大线程数,当队列满后会扩容到最大线程数
    • keepalivetime 当线程池中线程数大于corepoolsize 并且无新增任务时,销毁等待的最大时间。
    • unit 销毁时间单位
    • workQueue 工作队列
    • handler 饱和策略。当现在同时进行的任务数量大于最大线程数量并且队列也已经放满后,线程池采取的一些策略
      • AbortPolicy直接抛出异常,RejectedExecutionException.
      • CallerRunsPolicy ,调用执行自己的线程来完成任务,当您的任务不能抛弃时采取这个策略,这个策略会给系统带来额外的开销,影响性能。
      • DiscardPolicy 直接抛弃掉
      • DiscardOldestPolicy 丢弃掉最老的任务。

    execute流程

    execute流程

    流程说明

    • 这里注意一点只有等待队列里放满后,核心线程数才会逐步增加到最大线程数。
    • 流程就按照图中的处理机制,就不加以详细说明了,有何问题欢迎留言。
    定位问题原因* 根据原因思考问题解决方案* 实践验证方案有效性* 提交验证结果
  • 相关阅读:
    《Glibc内存管理》笔记DAY1
    highcharts相关属性
    SQL Server常用技巧
    常用系统表相关的操作
    SQL递归
    jQuery 根据JSON数据动态生成表格
    string.Format 格式化输出日期
    Easyui修改样式
    submit异步提交 回调的方法
    mvc多个按钮的提交方法
  • 原文地址:https://www.cnblogs.com/jimoliunian/p/12792076.html
Copyright © 2011-2022 走看看