参考文档

线程池任务执行全过程:https://blog.csdn.net/wojiaolinaaa/article/details/51345789

线程池中断:https://www.cnblogs.com/trust-freedom/p/6693601.html

为什么要使用线程池

线程是一个操作系统概念。操作系统负责这个线程的创建、挂起、运行、阻塞和终结操作。而操作系统创建线程、切换线程状态、终结线程都要进行CPU调度——这是一个耗费时间和系统资源的事情。
另一方面,大多数实际场景中是这样的:处理某一次请求的时间是非常短暂的,但是请求数量是巨大的。这种技术背景下,如果我们为每一个请求都单独创建一个线程,那么物理机的所有资源基本上都被操作系统创建线程、切换线程状态、销毁线程这些操作所占用,用于业务请求处理的资源反而减少了。所以最理想的处理方式是,将处理请求的线程数量控制在一个范围,既保证后续的请求不会等待太长时间,又保证物理机将足够的资源用于请求处理本身。
另外,一些操作系统是有最大线程数量限制的。当运行的线程数量逼近这个值的时候,操作系统会变得不稳定。这也是我们要限制线程数量的原因

Java通过Executors提供四种线程池,分别为:

newCachedThreadPool:提交的任务一定有线程去处理。如果线程池长度超过实际处理需要,可灵活回收空闲线程。(线程最大并发数不可控制

public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>()); //SynchronousQueue是一个不存储元素的阻塞队列。每一个put操作必须等待一个take操作,否则不能继续添加元素
    }
View Code

相关文章:

  • 2022-12-23
  • 2021-07-22
  • 2022-12-23
  • 2021-05-07
  • 2021-12-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-28
  • 2021-07-10
  • 2021-09-11
  • 2021-05-21
  • 2022-01-07
  • 2021-12-12
相关资源
相似解决方案