一 常见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次循环