java 线程池理解

https://www.cnblogs.com/dafanjoy/p/9729358.html

public static void main(String a[]) {
   definedExecutor();
}
public static void definedExecutor() {   // 参数 corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue
   // corePoolSize = 5 maximumPoolSize = 11  workQueue = 3
   Executor executor = new ThreadPoolExecutor(
          CorePoolSize(核心线程数量):5,    //20个任务 第一 会先创建5个
          maxmumPoolSize(允许线程的最大数量):11, //第三 剩余的10个 可以在允许的最大线程数中再创建 6 个,
                                                //因为CorePoolSize中已经创建了5个, 剩下4个会被拒绝,抛出异常
          KeepAliveTime(线程所允许的最大空闲时间):60, 
          TimeUnit.SECONDS,    //(维护线程所允许的空闲时间的单位)     
          new LinkedBlockingQueue<Runnable>(5) // 无界队列,第二 放入5个 到队列中排队 
   );
   executorsTest(executor);
   
  //ExecutorService executorService = Executors.newFixedThreadPool(5);  
  //executorsTest(executor); 创建固定大小线程池实际也是调用的ThreadPoolExecutor,CorePoolSize,maxmumPoolSize值为参数传递
                            //无界队列中没有固定的队列数, 所有多出的任务都会放到队列中排队。

  //创建一个单线程, 始终只会有一个 实际也是调用的ThreadPoolExecutor,CorePoolSize,maxmumPoolSize值固定是1
  //Executor executor = Executors.newSingleThreadExecutor();
  //executorsTest(executor);
}
// 模拟15个任务并发执行
private static void executorsTest(Executor executor) {
   for (int i = 0; i < 20; i++) {
      executor.execute(new Runnable() {
         @Override
         public void run() {
            System.out.println(Thread.currentThread().getName() + "正在执行");
            try {
               Thread.sleep(1000);
            } catch (InterruptedException e) {
               e.printStackTrace();
            }
         }
      });
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值