• 线程池的创建使用


    线程池的构造方法

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

    1.corePoolSize 表示线程池的大小
    如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。

    2. maximumPoolSize 线程池最大大小

    3.keepAliveTime 线程的存活时间

    4.TimeUnit 线程活动保持的时间单位

    55.workQueue 表示任务队列 用于保存等待执行的任务的阻塞队列 常见的几种队列

    a.ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
    b.LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列
    c.SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
    d.PriorityBlockingQueue:一个具有优先级的无限阻塞队列。

    6.ThreadFactory 工厂,用于设置创建线程的工厂。

    7.RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务
    常见的策略
    a.AbortPolicy:直接抛出异常。
    b.CallerRunsPolicy:只用调用者所在线程来运行任务。
    c.DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
    d.DiscardPolicy:不处理,丢弃掉

    8.常见的自定义线程
    Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)
    Executors.newFixedThreadPool(int)(固定大小线程池)
    Executors.newSingleThreadExecutor()(单个后台线程)

    人这辈子没法做太多事情,所以每做一件事都要做到精彩绝伦。 因为,这就是我的宿命。人生苦短,你明白吗? 所以这是我为人生做出的选择
  • 相关阅读:
    使用 Sentry集中处理错误
    laravel实现多对多的分析
    windows下phpstorm的快捷键
    npm 升级
    squid----正向代理
    nginx----配置优化
    负载均衡----nginx
    负载均衡----HAproxy
    负载均衡----LVS
    mysql-8.0.12读写分离
  • 原文地址:https://www.cnblogs.com/junjun1578/p/14756823.html
Copyright © 2020-2023  润新知