线程池参数

我把线程池参数给做个形象的比喻,线程池 就好比一个水池,池底有N个小洞,就是核心线程数量N,最大线程数量就是这个池子能装多少个桌球,等待队列 就是池子之外的一块地方,有的队列是有界的,就是大小固定,有的是无界的,大小不固定。

任务 就是把桌球丢到池子中,让桌球从池底的小洞掉下去。相当于线程的执行。

 

当前线程小于核心线程N的时候,则直接创建线程,否则就进入等待队列中等待,如果队列的大小是不固定的,就是多少线程都会进入到队列中,线程池中的线程数量就是核心线程数量,这个时候最大线程数量就没有任何意义了。如果队列的大小是固定的,当队列满的时候还有新的任务进来,则在线程池中创建线程,处于等待状态。如果线程池满了,就执行拒绝策略。

 

我们用上面的例子来说明这个问题 ,当掉入池子中桌球小于池底的小洞数量的时候,这些桌球就会掉入洞中,假设掉入是需要一定的时间的,慢慢掉入,(模拟任务的执行时间)。持续的桌球不断的从外面掉入池子中,直到底部已经没有空闲的小洞可以塞了,这个时候不在洞中的桌球不能放在池中,只能放在外面的那块空地等待,如果那块空地的面积是足够大的,多少球都放的下,这种情况下,新进来的球来多少都放在那块空地上等待。如果那块空地大小有限,只能放固定数量的桌球。当空地放满桌球的时候,新来的桌球放不下了并且池子还没满(没满的意思就是核心线程数小于最大线程数量),这个时候才可以放入水池中。整个过程中 如果任何新进来的桌球发现池底的小球穿过了小洞,小洞变成了空洞,这个时候新进来的桌球可以直接放到小洞中去。

假设我们创建了一个核心线程数为2  最大线程数为4 ,队列长度为5的有界队列 线程池。

这时有六个任务进来,前面进来的两个任务直接在线程池中创建,接下来的四个线程放入队列中,因为队列的长度是五,可以放的下。此时线程池中只有两个任务在执行,执行完了再从队列中取出任务来创建线程。

 

注意要点:最大线程数 用的着的时候是 队列大小固定,并且队列已经满了,还有任务进来才有用,否则无用,

 因为线程进来的顺序是 先创建核心线程数量的线程,然后就进入队列等待 ,队列满了 ,才进入线程池(最大线程大于核心线程数)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中线程池参数包括以下7个: 1. corePoolSize:线程池的基本大小,即在没有任务需要执行的时候线程池的大小。 2. maximumPoolSize:线程池最大的大小,即线程池中允许的最大线程。 3. keepAliveTime:线程池中的线程空闲后,保持存活的时间。 4. unit:keepAliveTime的时间单位。 5. workQueue:任务队列,用于保存等待执行的任务的阻塞队列。 6. threadFactory:线程工厂,用于创建新线程。 7. handler:拒绝策略,用于当任务队列已满,且线程池中的线程达到maximumPoolSize时,如何拒绝新任务的策略。 下面是一个示例代码,展示了如何使用Java中的线程池参数: ```java import java.util.concurrent.*; public class ThreadPoolDemo { public static void main(String[] args) { // 创建一个线程池 ThreadPoolExecutor executor = new ThreadPoolExecutor( 2, // corePoolSize 4, // maximumPoolSize 60, // keepAliveTime TimeUnit.SECONDS, // unit new ArrayBlockingQueue<Runnable>(4), // workQueue Executors.defaultThreadFactory(), // threadFactory new ThreadPoolExecutor.AbortPolicy() // handler ); // 提交任务 for (int i = 0; i < 10; i++) { executor.execute(new Task(i)); } // 关闭线程池 executor.shutdown(); } static class Task implements Runnable { private int num; public Task(int num) { this.num = num; } @Override public void run() { System.out.println("正在执行task " + num); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task " + num + "执行完毕"); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值