• Java ThreadPoolExecutor 线程池


    1. import java.util.concurrent.ThreadPoolExecutor;
    2. import java.util.concurrent.TimeUnit;
    3. import java.util.concurrent.ArrayBlockingQueue;
    4. public class ThreadPoolExample {
    5. public static void main(String[] args) {
    6. // 创建线程池对象
    7. ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
    8. 2, // 核心线程数
    9. 3, // 最大线程数
    10. 1, // 线程空闲时间
    11. TimeUnit.MINUTES, // 空闲时间的单位
    12. new ArrayBlockingQueue<>(2) // 任务队列
    13. );
    14. // 提交任务给线程池执行
    15. threadPool.execute(new Runnable() {
    16. @Override
    17. public void run() {
    18. // 任务的具体逻辑
    19. System.out.println("Task executed by thread: " + Thread.currentThread().getName());
    20. }
    21. });
    22. // 关闭线程池
    23. threadPool.shutdown();
    24. }
    25. }

     

      ThreadPoolExecutor是Java中用于管理和执行线程任务的一个实现类。

      new ThreadPoolExecutor的参数:

      1. corePoolSize(核心线程数):

        指定线程池中保持活动状态的线程数,即最小的线程数。即使线程处于空闲状态,核心线程也不会被回收。如果提交的任务数小于核心线程数,线程池会创建新的线程来处理任务。

      2. maximumPoolSize(最大线程数):

        指定线程池中允许存在的最大线程数。当提交的任务数超过核心线程数时,线程池会创建新的线程来处理任务,直到达到最大线程数。如果任务数继续增加,而线程池已经达到最大线程数,后续的任务将会被放入任务队列中等待执行。

      3. keepAliveTime(线程空闲时间):

        指定线程的空闲时间,即当线程池中的线程空闲时间超过该值时,多余的线程将被回收。只有当线程池中的线程数大于核心线程数时,才会应用空闲时间。

      4. unit(空闲时间的单位):

        指定线程空闲时间的单位,可以是TimeUnit.SECONDS、TimeUnit.MINUTES等。

      5. workQueue(任务队列):

        指定线程池的任务队列,用于存储等待执行的任务。可以使用不同的队列实现,如ArrayBlockingQueue、LinkedBlockingQueue等,这些队列都实现了BlockingQueue接口。   

        workQueue是一个容器,这个容器存储将要执行的任务 .    

        当线程池中的线程已经达到核心线程数,并且有新的任务提交时,这些任务会被放入任务队列中等待执行。

        任务队列的大小会影响线程池的行为。如果任务队列的大小有限,当任务数超过队列大小时,线程池会根据最大线程数来创建新的线程来处理任务。如果任务队列的大小为无界(例如LinkedBlockingQueue),则线程池会一直接受新的任务,直到达到最大线程数。    

        通过调整这些参数,可以根据实际需求来配置线程池的行为。例如,通过增加核心线程数和最大线程数,可以提高线程池的并发能力;通过调整线程空闲时间和任务队列的大小,可以控制线程池的资源消耗和任务处理能力。 需要根据具体的应用场景和需求来选择合适的参数值,以达到最佳的性能和资源利用率。

  • 相关阅读:
    从零到一部署网站(一)
    验证码的编写
    MFC转Winform&&C++转C#
    管理会计习题集及答案 8-14章
    微信开发者工具下载
    【NLP】预训练模型——GPT1
    DBCO-S-S-NHS ester,1435934-53-4包装存储要求
    Linux下库的入门与制作
    【自动化测试】基于Selenium + Python的web自动化框架
    SQL基础
  • 原文地址:https://blog.csdn.net/weixin_41812346/article/details/134042276