常见的四种连接池实现

各种线程池父类:ThreadPoolExecutor

构造函数如下:

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

参数解释:

corePoolSize:线程池会保留的线程数(当为0的时候,keepAliveTime删除)

maximumPoolSize:线程池中最大线程数

keepAliveTime:当线程池中线程数大于corePoolSize时,空闲线程的存活时间

TimeUnit 时间单位

BlockingQueue:阻塞队列,用以存放线程

ThreadFactory:线程工厂

RejectedExecutionHandler:被拒绝handler



1.newCachedThreadExecutor

public static ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。

2.newFixedThreadPool

顾名思义可以控制并发线程数

   实现:

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

    同时运行不会超过固定最大线程数,当达到之后,后续的线程将加入阻塞队列,等之前任务结束之后从阻塞队列获取新的任务

3.newScheduledThreadExecutor

创建一个可定时单线程线程池,可以延时,可以定时来执行任务,当一个任务异常后,会创建一个新任务

4.newSingleScheduledThreadExecutor

保证线程池只有一个线程运行,当线程死掉会有新线程被启动

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值