zoukankan      html  css  js  c++  java
  • Java创建线程池的方法

    Executors创建四种线程池:

    CachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_value,当有需要时创建线程来执行任务,没有需要时回收线程,适用于耗时少,任务量大的情况。

    ScheduledThreadPool:周期性执行任务的线程池,按照某种特定的计划执行线程中的任务,有核心线程,但也有非核心线程,非核心线程的大小也为无限大。适用于执行周期性的任务。

    SingleThreadPool:只有一条线程来执行任务,适用于有顺序的任务的应用场景。

    FixedThreadPool:定长的线程池,有核心线程,核心线程的即为最大的线程数量。

    创建方式

    public class ThreadPoolDemo {
        public static void main(String[] args) {
            Executors.newFixedThreadPool(3);
            Executors.newCachedThreadPool();
            Executors.newScheduledThreadPool(3);
            Executors.newSingleThreadExecutor();
        }
    }
    

    实际开发中采用ThreadPoolExecutor创建线程池:

    原因:

    • FixedThreadPool和SingleThreadExecutor => 允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而引起OOM异常
    • CachedThreadPool => 允许创建的线程数为Integer.MAX_VALUE,可能会创建大量的线程,从而引起OOM异常

    创建方式

        public ThreadPoolExecutor(int corePoolSize,
                                  int maximumPoolSize,
                                  long keepAliveTime,
                                  TimeUnit unit,
                                  BlockingQueue<Runnable> workQueue,
                                  ThreadFactory threadFactory,
                                  RejectedExecutionHandler handler)
    

    ThreadPoolExecutor参数说明:

    corePoolSize : 线程池核心池的大小

    maximumPoolSize : 线程池的最大线程数

    keepAliveTime :线程最大空闲时间

    unit : 时间单位

    workQueue : 用来储存等待执行任务的队列

    threadFactory : 线程工厂

    handler :拒绝策略

    四种拒绝策略

    当提交任务数大于 corePoolSize 的时候,会优先将任务放到 workQueue 阻塞队列中。当阻塞队列饱和后,会扩充线程池中线程数,直到达到 maximumPoolSize 最大线程数配置。此时,再多余的任务,则会触发线程池的拒绝策略了。

    • AbortPolicy - 丢弃任务,并抛出拒绝执行 RejectedExecutionException 异常信息。线程池默认的拒绝策略。必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行。
    • CallerRunsPolicy-由调用者线程执行
    • DiscardPolicy - 直接丢弃
    • DiscardOldestPolicy - 当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue 中最老的一个任务,并将新任务加入
  • 相关阅读:
    开网店10年 英国诞生首位eBay百万富翁
    WINCE BSP包只读属性导致编译出错
    WinCE文件目录定制
    项目管理概述学习记录(一)
    wince 串口调试信息输出
    Windows Embedded CE 6.0高级内存管理 .
    项目管理概述学习记录(二)
    Wince 中如何实现注册表恢复原厂设置
    Windows CE设备驱动开发之电源管理
    WINCE6.0拨号连不上
  • 原文地址:https://www.cnblogs.com/aslanvon/p/15049405.html
Copyright © 2011-2022 走看看