Java多线程之线程池详解

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 {
    public static void main(String[] args) {
//        1池5个处理线程
        ExecutorService threadPool = Executors.newFixedThreadPool(5);

//        模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
        try {
            for (int i = 1; i <= 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName()+"\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }
}
  1. 执行结果:
    在这里插入图片描述

2. Executors.newSingleThreadExecutor()

  1. Executors.newSingleThreadExecutor()概述在这里插入图片描述
  2. 代码验证
public class MyThreadPoolDemo {
    public static void main(String[] args) {

        ExecutorService threadPool = Executors.newSingleThreadExecutor();

        try {
//        模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
            for (int i = 1; i <= 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName()+"\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }
}
  1. 执行结果:
    在这里插入图片描述

3. Executors.newCachedThreadPooI()

  1. Executors.newCachedTIyeadPooI() 概述
    在这里插入图片描述

  2. 代码验证:

public class MyThreadPoolDemo {
    public static void main(String[] args) {

        ExecutorService threadPool = Executors.newCachedThreadPool();
        
        try {
//        模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
            for (int i = 1; i <= 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + "\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }
}
  1. 执行结果:
    在这里插入图片描述

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


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


4. 线程池底层工作原理

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值