多线程JUC 第2季 四种线程池的比较

一  常见4种线程池的使用

1.1 固定线程池

1.代码逻辑说明

10个任务,分给线程池中的3个线程,每个线程中的任务循环10次,则总共有10*10 =100次的输出。其中外循环控制任务数,线程池控制线程数,每个runnable中的内循环控制每个线程打印次数。

2.代码

package com.ljf.thread.threadpooldemo;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @ClassName: FixedThreadPoolDemo
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/11/05 13:44:44 
 * @Version: V1.0
 **/
public class FixedThreadPoolDemo {
    /**
     * 固定线程池
     * 使用Executors.newFixedThreadPool(3)方法指定池中允许执行线程的个数
     * 如果超过这个线程个数,后面的线程就会等待
     */
    public static void main(String[] args) {
        //创建一个初始线程为3个的线程池
        ExecutorService pool= Executors.newFixedThreadPool(3);
        for(int i=0;i<10;i++){
            final int task=i;
            pool.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(20);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    for(int j=0;j<10;j++){
                        System.out.println(Thread.currentThread().getName()+"正在进行第"+task+"个任务,第"+j+"次循环");
                    }
                }
            });
        }
        System.out.println("all of ten tasks have committed");
        //关闭线程池
        pool.shutdown();
    }
}

3.结果

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" -javaagent:F:\刘建富\ideaIU-2020.1.1\lib\idea_rt.jar=4609:F:\刘建富\ideaIU-2020.1.1\bin -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;E:\multi-thread-2022\juc-demo-202211\target\classes;D:\m2\repository\org\projectlombok\lombok\1.16.20\lombok-1.16.20.jar;D:\m2\repository\org\apache\commons\commons-lang3\3.11\commons-lang3-3.11.jar" com.ljf.thread.threadpooldemo.FixedThreadPoolDemo
all of ten tasks have committed
pool-1-thread-1正在进行第0个任务,第0次循环
pool-1-thread-1正在进行第0个任务,第1次循环
pool-1-thread-1正在进行第0个任务,第2次循环
pool-1-thread-1正在进行第0个任务,第3次循环
pool-1-thread-1正在进行第0个任务,第4次循环
pool-1-thread-1正在进行第0个任务,第5次循环
pool-1-thread-1正在进行第0个任务,第6次循环
pool-1-thread-1正在进行第0个任务,第7次循环
pool-1-thread-1正在进行第0个任务,第8次循环
pool-1-thread-1正在进行第0个任务,第9次循环
pool-1-thread-3正在进行第2个任务,第0次循环
pool-1-thread-3正在进行第2个任务,第1次循环
pool-1-thread-3正在进行第2个任务,第2次循环
pool-1-thread-3正在进行第2个任务,第3次循环
pool-1-thread-3正在进行第2个任务,第4次循环
pool-1-thread-3正在进行第2个任务,第5次循环
pool-1-thread-3正在进行第2个任务,第6次循环
pool-1-thread-3正在进行第2个任务,第7次循环
pool-1-thread-3正在进行第2个任务,第8次循环
pool-1-thread-3正在进行第2个任务,第9次循环
pool-1-thread-2正在进行第1个任务,第0次循环
pool-1-thread-2正在进行第1个任务,第1次循环
pool-1-thread-2正在进行第1个任务,第2次循环
pool-1-thread-2正在进行第1个任务,第3次循环
pool-1-thread-2正在进行第1个任务,第4次循环
pool-1-thread-2正在进行第1个任务,第5次循环
pool-1-thread-2正在进行第1个任务,第6次循环
pool-1-thread-2正在进行第1个任务,第7次循环
pool-1-thread-2正在进行第1个任务,第8次循环
pool-1-thread-2正在进行第1个任务,第9次循环
pool-1-thread-1正在进行第3个任务,第0次循环
pool-1-thread-1正在进行第3个任务,第1次循环
pool-1-thread-1正在进行第3个任务,第2次循环
pool-1-thread-1正在进行第3个任务,第3次循环
pool-1-thread-1正在进行第3个任务,第4次循环
pool-1-thread-1正在进行第3个任务,第5次循环
pool-1-thread-1正在进行第3个任务,第6次循环
pool-1-thread-1正在进行第3个任务,第7次循环
pool-1-thread-1正在进行第3个任务,第8次循环
pool-1-thread-1正在进行第3个任务,第9次循环
pool-1-thread-2正在进行第5个任务,第0次循环
pool-1-thread-2正在进行第5个任务,第1次循环
pool-1-thread-2正在进行第5个任务,第2次循环
pool-1-thread-2正在进行第5个任务,第3次循环
pool-1-thread-2正在进行第5个任务,第4次循环
pool-1-thread-3正在进行第4个任务,第0次循环
pool-1-thread-2正在进行第5个任务,第5次循环
pool-1-thread-3正在进行第4个任务,第1次循环
pool-1-thread-3正在进行第4个任务,第2次循环
pool-1-thread-3正在进行第4个任务,第3次循环
pool-1-thread-3正在进行第4个任务,第4次循环
pool-1-thread-3正在进行第4个任务,第5次循环
pool-1-thread-3正在进行第4个任务,第6次循环
pool-1-thread-3正在进行第4个任务,第7次循环
pool-1-thread-3正在进行第4个任务,第8次循环
pool-1-thread-3正在进行第4个任务,第9次循环
pool-1-thread-2正在进行第5个任务,第6次循环
pool-1-thread-2正在进行第5个任务,第7次循环
pool-1-thread-2正在进行第5个任务,第8次循环
pool-1-thread-2正在进行第5个任务,第9次循环
pool-1-thread-1正在进行第6个任务,第0次循环
pool-1-thread-1正在进行第6个任务,第1次循环
pool-1-thread-1正在进行第6个任务,第2次循环
pool-1-thread-1正在进行第6个任务,第3次循环
pool-1-thread-1正在进行第6个任务,第4次循环
pool-1-thread-1正在进行第6个任务,第5次循环
pool-1-thread-1正在进行第6个任务,第6次循环
pool-1-thread-1正在进行第6个任务,第7次循环
pool-1-thread-1正在进行第6个任务,第8次循环
pool-1-thread-1正在进行第6个任务,第9次循环
pool-1-thread-3正在进行第7个任务,第0次循环
pool-1-thread-3正在进行第7个任务,第1次循环
pool-1-thread-3正在进行第7个任务,第2次循环
pool-1-thread-3正在进行第7个任务,第3次循环
pool-1-thread-2正在进行第8个任务,第0次循环
pool-1-thread-3正在进行第7个任务,第4次循环
pool-1-thread-3正在进行第7个任务,第5次循环
pool-1-thread-3正在进行第7个任务,第6次循环
pool-1-thread-3正在进行第7个任务,第7次循环
pool-1-thread-2正在进行第8个任务,第1次循环
pool-1-thread-3正在进行第7个任务,第8次循环
pool-1-thread-2正在进行第8个任务,第2次循环
pool-1-thread-2正在进行第8个任务,第3次循环
pool-1-thread-2正在进行第8个任务,第4次循环
pool-1-thread-2正在进行第8个任务,第5次循环
pool-1-thread-2正在进行第8个任务,第6次循环
pool-1-thread-2正在进行第8个任务,第7次循环
pool-1-thread-2正在进行第8个任务,第8次循环
pool-1-thread-2正在进行第8个任务,第9次循环
pool-1-thread-3正在进行第7个任务,第9次循环
pool-1-thread-1正在进行第9个任务,第0次循环
pool-1-thread-1正在进行第9个任务,第1次循环
pool-1-thread-1正在进行第9个任务,第2次循环
pool-1-thread-1正在进行第9个任务,第3次循环
pool-1-thread-1正在进行第9个任务,第4次循环
pool-1-thread-1正在进行第9个任务,第5次循环
pool-1-thread-1正在进行第9个任务,第6次循环
pool-1-thread-1正在进行第9个任务,第7次循环
pool-1-thread-1正在进行第9个任务,第8次循环
pool-1-thread-1正在进行第9个任务,第9次循环

Process finished with exit code 0

1.2 缓存线程池

 1.需求背景

10个任务,分给线程池中的3个线程,每个线程中的任务循环10次,则总共有10*10 =100次的输出。其中外循环控制任务数,线程池控制线程数,每个runnable中的内循环控制每个线程打印次数。

2.代码

 public static void main(String[] args) {  
        //创建一个缓存线程池  
        ExecutorService pool=Executors.newCachedThreadPool();  
        for(int i=0;i<10;i++){  
            final int task=i;  
            pool.execute(new Runnable() {  
                @Override  
                public void run() {  
                    try {  
                        Thread.sleep(20);  
                    } catch (InterruptedException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    }  
                    for(int j=0;j<10;j++){  
                        System.out.println(Thread.currentThread().getName()+"正在进行第"+task+"个任务,第"+j+"次循环");  
                    }  
                }  
            });  
        }  
        System.out.println("all of ten tasks have committed");  
    }  

3.结果

pool-1-thread-1正在进行第0个任务,第0次循环
pool-1-thread-1正在进行第0个任务,第1次循环
pool-1-thread-1正在进行第0个任务,第2次循环
pool-1-thread-2正在进行第1个任务,第0次循环
pool-1-thread-2正在进行第1个任务,第1次循环
pool-1-thread-2正在进行第1个任务,第2次循环
pool-1-thread-2正在进行第1个任务,第3次循环
pool-1-thread-2正在进行第1个任务,第4次循环
pool-1-thread-2正在进行第1个任务,第5次循环
pool-1-thread-2正在进行第1个任务,第6次循环
pool-1-thread-2正在进行第1个任务,第7次循环
pool-1-thread-2正在进行第1个任务,第8次循环
pool-1-thread-1正在进行第0个任务,第3次循环
pool-1-thread-2正在进行第1个任务,第9次循环
pool-1-thread-1正在进行第0个任务,第4次循环
pool-1-thread-1正在进行第0个任务,第5次循环
pool-1-thread-1正在进行第0个任务,第6次循环
pool-1-thread-1正在进行第0个任务,第7次循环
pool-1-thread-4正在进行第3个任务,第0次循环
pool-1-thread-4正在进行第3个任务,第1次循环
pool-1-thread-4正在进行第3个任务,第2次循环
pool-1-thread-7正在进行第6个任务,第0次循环
pool-1-thread-9正在进行第8个任务,第0次循环
pool-1-thread-9正在进行第8个任务,第1次循环
pool-1-thread-9正在进行第8个任务,第2次循环
pool-1-thread-10正在进行第9个任务,第0次循环
pool-1-thread-10正在进行第9个任务,第1次循环
pool-1-thread-10正在进行第9个任务,第2次循环
pool-1-thread-10正在进行第9个任务,第3次循环
pool-1-thread-10正在进行第9个任务,第4次循环
pool-1-thread-10正在进行第9个任务,第5次循环
pool-1-thread-10正在进行第9个任务,第6次循环
pool-1-thread-10正在进行第9个任务,第7次循环
pool-1-thread-10正在进行第9个任务,第8次循环
pool-1-thread-10正在进行第9个任务,第9次循环
pool-1-thread-8正在进行第7个任务,第0次循环
pool-1-thread-8正在进行第7个任务,第1次循环
pool-1-thread-8正在进行第7个任务,第2次循环
pool-1-thread-8正在进行第7个任务,第3次循环
pool-1-thread-8正在进行第7个任务,第4次循环
pool-1-thread-8正在进行第7个任务,第5次循环
pool-1-thread-6正在进行第5个任务,第0次循环
pool-1-thread-6正在进行第5个任务,第1次循环
pool-1-thread-6正在进行第5个任务,第2次循环
pool-1-thread-6正在进行第5个任务,第3次循环
pool-1-thread-6正在进行第5个任务,第4次循环
pool-1-thread-6正在进行第5个任务,第5次循环
pool-1-thread-6正在进行第5个任务,第6次循环
pool-1-thread-5正在进行第4个任务,第0次循环
pool-1-thread-5正在进行第4个任务,第1次循环
pool-1-thread-5正在进行第4个任务,第2次循环
pool-1-thread-3正在进行第2个任务,第0次循环
pool-1-thread-3正在进行第2个任务,第1次循环
pool-1-thread-3正在进行第2个任务,第2次循环
pool-1-thread-3正在进行第2个任务,第3次循环
pool-1-thread-3正在进行第2个任务,第4次循环
pool-1-thread-3正在进行第2个任务,第5次循环
pool-1-thread-5正在进行第4个任务,第3次循环
pool-1-thread-5正在进行第4个任务,第4次循环
pool-1-thread-6正在进行第5个任务,第7次循环
pool-1-thread-6正在进行第5个任务,第8次循环
pool-1-thread-6正在进行第5个任务,第9次循环
pool-1-thread-8正在进行第7个任务,第6次循环
pool-1-thread-9正在进行第8个任务,第3次循环
pool-1-thread-9正在进行第8个任务,第4次循环
pool-1-thread-9正在进行第8个任务,第5次循环
pool-1-thread-9正在进行第8个任务,第6次循环
pool-1-thread-7正在进行第6个任务,第1次循环
pool-1-thread-7正在进行第6个任务,第2次循环
pool-1-thread-7正在进行第6个任务,第3次循环
pool-1-thread-7正在进行第6个任务,第4次循环
pool-1-thread-7正在进行第6个任务,第5次循环
pool-1-thread-7正在进行第6个任务,第6次循环
pool-1-thread-7正在进行第6个任务,第7次循环
pool-1-thread-7正在进行第6个任务,第8次循环
pool-1-thread-7正在进行第6个任务,第9次循环
pool-1-thread-4正在进行第3个任务,第3次循环
pool-1-thread-4正在进行第3个任务,第4次循环
pool-1-thread-4正在进行第3个任务,第5次循环
pool-1-thread-4正在进行第3个任务,第6次循环
pool-1-thread-4正在进行第3个任务,第7次循环
pool-1-thread-4正在进行第3个任务,第8次循环
pool-1-thread-4正在进行第3个任务,第9次循环
pool-1-thread-1正在进行第0个任务,第8次循环
pool-1-thread-1正在进行第0个任务,第9次循环
pool-1-thread-9正在进行第8个任务,第7次循环
pool-1-thread-8正在进行第7个任务,第7次循环
pool-1-thread-8正在进行第7个任务,第8次循环
pool-1-thread-8正在进行第7个任务,第9次循环
pool-1-thread-5正在进行第4个任务,第5次循环
pool-1-thread-5正在进行第4个任务,第6次循环
pool-1-thread-5正在进行第4个任务,第7次循环
pool-1-thread-5正在进行第4个任务,第8次循环
pool-1-thread-5正在进行第4个任务,第9次循环
pool-1-thread-3正在进行第2个任务,第6次循环
pool-1-thread-9正在进行第8个任务,第8次循环
pool-1-thread-9正在进行第8个任务,第9次循环
pool-1-thread-3正在进行第2个任务,第7次循环
pool-1-thread-3正在进行第2个任务,第8次循环
pool-1-thread-3正在进行第2个任务,第9次循环

https://huxc.iteye.com/blog/2179106

https://cuisuqiang.iteye.com/blog/2019372

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值