线程池的7种创建方式,强烈推荐你用它...(2)

简介: 线程池的7种创建方式,强烈推荐你用它...(2)

1.FixedThreadPool


创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待。


使用示例如下:


public static void fixedThreadPool() {
    // 创建 2 个数据级的线程池
    ExecutorService threadPool = Executors.newFixedThreadPool(2);
    // 创建任务
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("任务被执行,线程:" + Thread.currentThread().getName());
        }
    };
    // 线程池执行任务(一次添加 4 个任务)
    // 执行任务的方法有两种:submit 和 execute
    threadPool.submit(runnable);  // 执行方式 1:submit
    threadPool.execute(runnable); // 执行方式 2:execute
    threadPool.execute(runnable);
    threadPool.execute(runnable);
}


执行结果如下:


微信图片_20220120145432.jpg


如果觉得以上方法比较繁琐,还用更简单的使用方法,如下代码所示:


public static void fixedThreadPool() {
    // 创建线程池
    ExecutorService threadPool = Executors.newFixedThreadPool(2);
    // 执行任务
    threadPool.execute(() -> {
        System.out.println("任务被执行,线程:" + Thread.currentThread().getName());
    });
}


2.CachedThreadPool


创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程。


使用示例如下:


public static void cachedThreadPool() {
    // 创建线程池
    ExecutorService threadPool = Executors.newCachedThreadPool();
    // 执行任务
    for (int i = 0; i < 10; i++) {
        threadPool.execute(() -> {
            System.out.println("任务被执行,线程:" + Thread.currentThread().getName());
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
            }
        });
    }
}
相关文章
|
Linux C语言
嵌入式软件调试中的打印开关及打印等级
嵌入式软件调试中的打印开关及打印等级
|
JavaScript
vue将日期数据转换成字符串
vue将日期数据转换成字符串
372 0
|
存储 编解码 数据库
基于文本嵌入和 CLIP 图像嵌入的多模态检索
基于文本嵌入和 CLIP 图像嵌入的多模态检索
672 0
|
开发框架 移动开发 小程序
uniapp实现简单登录注册
uniapp实现简单登录注册
398 0
|
并行计算 编译器 Linux
CMake 秘籍(三)(5)
CMake 秘籍(三)
183 0
|
缓存 Java 程序员
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
|
C语言
C语言 13 指针进阶 壹
C语言 13 指针进阶 壹
72 0
|
JavaScript C语言 Python
好玩的小游戏系列 (一)基于html+js 原生贪吃蛇
好玩的小游戏系列 (一)基于html+js 原生贪吃蛇
243 0
好玩的小游戏系列 (一)基于html+js 原生贪吃蛇
|
算法
从零开始手把手教你使用javascript+canvas开发一个塔防游戏02敌人自动寻路
从零开始手把手教你使用javascript+canvas开发一个塔防游戏02敌人自动寻路
328 0
|
SQL 数据可视化 JavaScript
【Python | 杂代码】教你用pyecharts实现数据视图化分析
【Python | 杂代码】教你用pyecharts实现数据视图化分析
233 0
【Python | 杂代码】教你用pyecharts实现数据视图化分析