线程池技术启动多线程

本文通过工厂类比,深入浅出地介绍了线程池中corePoolSize、maximumPoolSize及largestPoolSize这三个关键参数的意义及其相互之间的关系,并提供了一个Java实现的线程池示例。
摘要由CSDN通过智能技术生成

每个变量的作用都已经标明出来了,这里要重点解释一下corePoolSize、maximumPoolSize、largestPoolSize三个变量。
  corePoolSize在很多地方被翻译成核心池大小,其实我的理解这个就是线程池的大小。举个简单的例子:
  假如有一个工厂,工厂里面有200个工人,每个工人同时只能做一件任务。
  因此只要当200个工人中有工人是空闲的,来了任务就分配给空闲的工人做;
  当200个工人都有任务在做时,如果还来了任务,就把任务进行排队等待;
  如果说新任务数目增长的速度远远大于工人做任务的速度,那么此时工厂主管可能会想补救措施,比如重新招100个临时工人进来;
  然后就将任务也分配给这100个临时工人做;
  如果说着3000个工人做任务的速度还是不够,此时工厂主管可能就要考虑不再接收新的任务或者抛弃前面的一些任务了。

  当这300个工人当中有人空闲时,而新任务增长的速度又比较缓慢,工厂主管可能就考虑辞掉100个临时工了,只保持原来的200个工人,毕竟请额外的工人是要花钱的。
  这个例子中的corePoolSize就是200,而maximumPoolSize就是300(200+100)。
  也就是说corePoolSize就是线程池大小,maximumPoolSize在我看来是线程池的一种补救措施,即任务量突然过大时的一种补救措施。
  不过为了方便理解,在本文后面还是将corePoolSize翻译成核心池大小。
  largestPoolSize只是一个用来起记录作用的变量,用来记录线程池中曾经有过的最大线程数目,跟线程池的容量没有任何关系。
代码:
public class TestThread2 {
public static void main(String[] args){
/*
* 第一个参数:corePoolSize。200表示线程池的大小
* 第二个参数:maximumPoolSize,300线程池的最大可容纳的线程数量
*/

    ThreadPoolExecutor executor = new ThreadPoolExecutor
            (200, 300,10, TimeUnit.MILLISECONDS, 
                    new ArrayBlockingQueue<Runnable>(5));
    for(int i=0;i<100;i++){
        Runnable r = new Runnable(){
            @Override
            public void run() {
                //具体的任务,创建新的客户端连接到服务器
                System.out.println("11111111111");
            }

        };
        executor.execute(r);
    }
    executor.shutdown();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值