zoukankan      html  css  js  c++  java
  • 线程池的理解与应用

    一. 线程池的理解

      单体的线程每次请求频繁的创建,请求过后频繁的销毁,导致线程栈中的资源的大量消耗。

      线程池的出现在于对单体线程的可控性,管理资源的消耗。

    二. Async的线程池(加配置)

      使用异步去配置线程池的话,如图

      此时此刻,没有指定Bean的名字,出现一个问题就是启动默认的Async线程池了,并且没有走你自己配置的线程池

        

     走配置的话需要指定Bean名称,让他去覆盖

      

     1  @Bean("taskExecutor")
     2     public AsyncTaskExecutor getAsyncE(){
     3         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
     4         executor.setCorePoolSize(coreSize);
     5         executor.setMaxPoolSize(maxSize);
     6         executor.setQueueCapacity(queueSize);
     7         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
     8         executor.setThreadNamePrefix("MyThread-");
     9         return executor;
    10     }

    打印如图

    三. Scheduled(配置)

    不需要指定Bean名称,如果不指定池子的大小默认为1

     1  @Bean
     2     public ThreadPoolTaskScheduler getTaskScheduled(){
     3         ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
     4         //配置池子的大小
     5         taskScheduler.setPoolSize(20);
     6         //拒绝策略为 抛出异常
     7         taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
     8         //设置名字
     9         taskScheduler.setThreadNamePrefix("MyScheduled-");
    10         return taskScheduler;
    11     }

    四. 线程池的五种配置

    1. newSingleThreadPoolExecutor
    2. newFixedThreadPoolExecutor
    3. newCachedThreadPoolExecutor
    4. newScheduledThreadPoolExecutor
    5. ThreadPoolExecutor

     底层全是ThreadPoolExecutor,默认策拒绝略都是AbortPolicy,LinkedBlockingQueue=Integer_Max_Value

    1. newSingleThreadPoolExecutor  -->  coreSize=1,maxSize=1

    2. newFixedThreadPoolExecutor  -->   coreSize = maxSize = 固定自己写入 = 5

     

    3. newCachedThreadPoolExecutor  -->   coreSize = 0,maxSize = Integer_Max_Value 

     

    4. newScheduledThreadPoolExecutor  -->  coreSize 默认为1 ,maxSize = Integer_max_value

     

    5. ThreadPoolExecutor

     五. 四种策略

    1. AbortPolicy --> 拒绝直接抛出异常
    2. CallerRunsPolicy  --> 拒绝策略为谁发来的返回给谁自己做
    3. DiscardOrdestPolicy  --> 丢弃最老的任务,排进去新任务
    4. DiscardPolicy  --> 直接丢弃任务

      

     

      

      

  • 相关阅读:
    OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能
    OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
    一起创业吧:兼职程序员接单平台
    .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂
    .NET和PHP程序员如何通过技术快速变现
    .NET程序员我是如何通过一个产品在2年内买车买房
    .NET方法无限传参数技术
    .NET 增加扩展方法
    毕业10年总结与2019展望
    jQuery 1.9/2.0/2.1及其以上 on 无效的解决办法
  • 原文地址:https://www.cnblogs.com/honour1207/p/14201003.html
Copyright © 2011-2022 走看看