1 Star 0 Fork 0

牙齿笑了/nkw

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ExecutorsDemo.java 3.70 KB
一键复制 编辑 原始数据 按行查看 历史
牙齿笑了 提交于 2026-01-22 00:20 +08:00 . feat:完善线程池运行顺序结果
package threadPool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 线程池Demo
* <p>
* Author: 起舞的日子
* Date:2026/1/21 15:33
*/
public class ExecutorsDemo {
public static void main(String[] args) {
testExecutors();
}
public static void testExecutors() {
// 1. 固定线程池 核心线程数=最大线程数,无空闲线程超时
//场景: 任务量稳定,避免线程频繁创建销毁
ExecutorService fixedPool = Executors.newFixedThreadPool(3); //3个固定工人
// 2. 缓存线程池
//场景: 任务量大但是耗时短(比如临时计算、异步回调)
ExecutorService cachedPool = Executors.newCachedThreadPool(); //无限临时工,60s没活辞退
//3. 单线程线程池 核心线程数=最大线程数=1,任务串行执行
//场景: 需要任务按顺序执行(比如日志写入、数据库批量操作)
ExecutorService singlePool = Executors.newSingleThreadExecutor(); //1个专属工人
//提交任务 2种方式 方式1:Runnable 无返回值; 方式2:Callable 有返回值
//方式1: Runnable
for (int i = 1; i <= 5; i++) {
int taskNum = i;
System.out.println("主线程:创建第" + i + " 个任务");
fixedPool.execute(() -> {
System.out.println("线程池中的异步任务执行【开始】");
System.out.println("线程 " + Thread.currentThread().getName() + " 处理任务" + taskNum);
try {
Thread.sleep(2000);//模拟任务耗时
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程池中的异步任务执行【完毕】");
});
System.out.println("主线程循环到:" + taskNum);
}
//方式2: Callable 有返回值,用Future获取
/*
Future<Integer> future = fixedPool.submit(() -> {
return 1 + 1;
});
try {
System.out.println("任务结果:"+future.get());//阻塞获取任务结果
} catch (Exception e) {
e.printStackTrace();
}
*/
//关闭线程池(必须关! 否则JVM不会退出)
fixedPool.shutdown(); //优雅关闭:等待已提交任务完成,不再接受新任务;
// cachedPool.shutdownNow(); //强制关闭:等待已提交任务完成,不再接受新任务,并打断正在处理的任务
}
/**
* 运行结果:
* 主线程:创建第1 个任务
* 线程池中的异步任务执行【开始】
* 主线程循环到:1
* 主线程:创建第2 个任务
* 主线程循环到:2
* 主线程:创建第3 个任务
* 线程池中的异步任务执行【开始】
* 主线程循环到:3
* 主线程:创建第4 个任务
* 线程池中的异步任务执行【开始】
* 主线程循环到:4
* 主线程:创建第5 个任务
* 主线程循环到:5
* 线程 pool-1-thread-2 处理任务2
* 线程 pool-1-thread-1 处理任务1
* 线程 pool-1-thread-3 处理任务3
* 线程池中的异步任务执行【完毕】
* 线程池中的异步任务执行【完毕】
* 线程池中的异步任务执行【完毕】
* 线程池中的异步任务执行【开始】
* 线程 pool-1-thread-3 处理任务4
* 线程池中的异步任务执行【开始】
* 线程 pool-1-thread-1 处理任务5
* 线程池中的异步任务执行【完毕】
* 线程池中的异步任务执行【完毕】
*
*
*
*
*/
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/YaChiXiaoLiao/nkw.git
git@gitee.com:YaChiXiaoLiao/nkw.git
YaChiXiaoLiao
nkw
nkw
master

搜索帮助