Java多线程之线程池详解

左手的ㄟ右手 2022-01-26 16:11 448阅读 0赞

Java多线程之线程池详解


目录:

  1. 线程池使用及优势
  2. 线程池3个常用方式
  3. 线程池7大参数深入介绍
  4. 线程池底层工作原理

1. 线程池使用及优势


  1. 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,
    如果线程数量超过了最大数量 超出数量的 线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。
  2. 它的主要特点为:线程复用,控制最大并发数,管理线程。

优点:

  1. 降低资源消耗。通过重复利用己创建的线程降低线程创建和销毁造成的消耗。
  2. 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
  3. 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进
    行统一的分配,调优和监控

2. 线程池3个常用方式


Java中的线程池是通过Executor框架实现的,该框架中用到了Executor,Executors,
ExecutorService,ThreadPoolExecutor这几个类。
线程池3个常用方式:

  1. Executors.newFixedThreadPool(int) :执行长期任务,性能好很多
  2. Executors.newSingleThreadExecutor() : 一个任务一个任务执行的场景
  3. Executors.newCachedThreadPooI() : 执行很多个短期异步的小程序或者负载较轻的服务器。

先看代码,再根据源码总结


1. Executors.newFixedThreadPool(int)


  1. Executors.newFixedThreadPool(int)概述
    在这里插入图片描述
  2. 代码验证

    public class MyThreadPoolDemo {

    1. public static void main(String[] args) {

    // 1池5个处理线程

    1. ExecutorService threadPool = Executors.newFixedThreadPool(5);

    // 模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。

    1. try {
    2. for (int i = 1; i <= 10; i++) {
    3. threadPool.execute(() -> {
    4. System.out.println(Thread.currentThread().getName()+"\t 办理业务");
    5. });
    6. }
    7. } catch (Exception e) {
    8. e.printStackTrace();
    9. } finally {
    10. threadPool.shutdown();
    11. }
    12. }

    }

  3. 执行结果:
    在这里插入图片描述


2. Executors.newSingleThreadExecutor()


  1. Executors.newSingleThreadExecutor()概述在这里插入图片描述
  2. 代码验证

    public class MyThreadPoolDemo {

    1. public static void main(String[] args) {
  1. ExecutorService threadPool = Executors.newSingleThreadExecutor();
  2. try {
  3. // 模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
  4. for (int i = 1; i <= 10; i++) {
  5. threadPool.execute(() -> {
  6. System.out.println(Thread.currentThread().getName()+"\t 办理业务");
  7. });
  8. }
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. } finally {
  12. threadPool.shutdown();
  13. }
  14. }
  15. }
  1. 执行结果:
    在这里插入图片描述

3. Executors.newCachedThreadPooI()


  1. Executors.newCachedTIyeadPooI() 概述
    在这里插入图片描述
  2. 代码验证:

    public class MyThreadPoolDemo {

    1. public static void main(String[] args) {
    2. ExecutorService threadPool = Executors.newCachedThreadPool();
    3. try {

    // 模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。

    1. for (int i = 1; i <= 10; i++) {
    2. threadPool.execute(() -> {
    3. System.out.println(Thread.currentThread().getName() + "\t 办理业务");
    4. });
    5. }
    6. } catch (Exception e) {
    7. e.printStackTrace();
    8. } finally {
    9. threadPool.shutdown();
    10. }
    11. }

    }

  3. 执行结果:
    在这里插入图片描述


3. 线程池7大参数深入介绍


篇幅限制,另开一篇详细说明。
Java多线程之线程池7大参数详解


4. 线程池底层工作原理

篇幅限制,另开一篇详细说明。
Java多线程之线程池底层工作原理

发表评论

表情:
评论列表 (有 0 条评论,448人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java线线

    java多线程之线程池 池化技术 程序的运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说

    相关 线线

    前言: 1. 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,