undertow 怎么创建线程_【线程池-ing】

本文介绍了线程池的作用,如减少线程创建开销和控制资源总数,并详细讲解了Java中提供的四种线程池类型:固定容量、定时/周期定长、可缓存和单线程线程池。同时,讨论了ThreadPoolExecutor的构造参数,包括核心线程数、最大线程数、存活时间等,并提出了关于线程回收的问题。
摘要由CSDN通过智能技术生成

一、线程池作用

  1. 复用已有的资源,解决频繁创建和销毁线程带来的开销
  2. 控制资源的总数,解决线程创建时数量不可控

优势:

  1. 可限流,控制线程数量
  2. 降低频繁创建和销毁线程带来的性能开销
  3. 对于任务响应速度更快

二、java中提供的线程池

jdk、spring

ThreadPoolExecutor实例

变量 ctl 32bit

高3位代表当前的线程池状态

低29位代表当前的线程数量

command = new App() implement Runable;

addworker(command,true);

1.添加工作线程数(cas添加工作线程数量)

2.创建工作线程

Executors线程池工厂类实际调用重载的new ThreadPoolExecutor()构造方法

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {
    if (corePoolSize < 0 ||
        maximumPoolSize <= 0 ||
        maximumPoolSize < corePoolSize ||
        keepAliveTime < 0)
        throw new IllegalArgumentException();
    if (workQueue == null || threadFactory == null || handler == null)
        throw new NullPointerException();
    this.acc = System.getSecurityManager() == null ?
            null :
            AccessController.getContext();
    this.corePoolSize = corePoolSize;
    this.maximumPoolSize = maximumPoolSize;
    this.workQueue = workQueue;
    this.keepAliveTime = unit.toNanos(keepAliveTime);
    this.threadFactory = threadFactory;
    this.handler = handler;
}

1. 固定容量的线程池:Executors.newFixedThreadPool

return new ThreadPoolExecutor(nThreads, nThreads,
                              0L, TimeUnit.MILLISECONDS,
                              new LinkedBlockingQueue<Runnable>(),
                              threadFactory);

2. 定时/周期 定长的线程池:Executors. newScheduledThreadPool

return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);

3. 创建一个可缓存线程池:Executors.newCachedThreadPool

return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                              60L, TimeUnit.SECONDS,
                              new SynchronousQueue<Runnable>());

4. 单线程化的线程池:Executors.newSingleThreadExecutor

return new FinalizableDelegatedExecutorService
    (new ThreadPoolExecutor(1, 1,
                            0L, TimeUnit.MILLISECONDS,
                            new LinkedBlockingQueue<Runnable>()));

问题:KeepaliveTime,怎么去监控线程进行回收?

三、ThreadPoolExecutor构造参数

01核心线程数、02最大线程数、03活跃时间、

04活跃时间单位、05阻塞队列:线程池超过核心线程数进队列

06线程工厂实例、07拒绝策略Hander:线程池超过最大线程数且队列满了时会调用饱和策略

9a35c58de6d6e6c87483584215ca37ad.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值