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  --> 直接丢弃任务

      

     

      

      

  • 相关阅读:
    Android Studio4.1.2中,修改了gradle后,如何在不关闭AS IDE的情况下使gradle进行sync
    Android-studio-ide-201.7042882-windows-4.1.2项目卡在Gradle: Download gradle-6.5-bin.zip
    Intellij IDEA开发环境中Springboot项目无Run ****main()的菜单
    《Bootstrap4Web设计与开发实战》源代码下载
    数字操作题目汇总
    机器学习模型跨平台上线
    koro1FileHeader 注释插件 vscode
    nginx https协议配置
    nginx 配置 不显示版本号
    Asp.Net Core 中的静态文件
  • 原文地址:https://www.cnblogs.com/honour1207/p/14201003.html
Copyright © 2011-2022 走看看