当前位置: 首页 > news >正文

如何让Java的线程池顺序执行任务 ?

一、基础概念


Java中的线程池本身并不提供内置的方式来保证任务的顺序执行的,因为线程池的设计目的是为了提高并发性能和效率,如果顺序执行的话,那就和单线程没区别了。


但是如果被问到想要实现这个功能该怎么做,有以下两种方式


1、使用单线程线程池


我们可以使用 SingleThreadExecutor这种线程池来执行任务,因为这个线程池中只有一个线程,所以他可以保证任务可以按照提交任务被顺序执行。

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(task1);
executor.submit(task2);
executor.submit(task3);
// 任务按照提交的顺序逐个执行
executor.shutdown();


2、使用有依赖关系的任务调度方式


可以使用 ScheduledThreadPoolExecutor结合ScheduledFuture 来实现任务的顺序执行。将任务按照顺序提交给线程池,每个任务的执行时间通过 ScheduledFuture的get()方法 等待前一个任务完成。


Scheduled【时给揍】

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);ScheduledFuture<?> future1 = executor.schedule(task1, 0, TimeUnit.MILLISECONDS);ScheduledFuture<?> future2 = executor.schedule(task2, future1.get(), TimeUnit.MILLISECONDS);ScheduledFuture<?> future3 = executor.schedule(task3, future2.get(), TimeUnit.MILLISECONDS);// 任务会按照依赖关系和前一个任务的执行时间逐个执行
executor.shutdown();
http://www.wxhsa.cn/company.asp?id=5194

相关文章:

  • Git 提交排除文件夹方法总结
  • 如何在 Ubuntu24.04 TLS 上安装 Kubernetes 集群 - Antonie
  • Jmeter的插件开发
  • Educational Codeforces Round 182 (Rated for Div. 2)
  • java第二周课前提问
  • java GC
  • Redis最佳实践——性能优化技巧之监控与告警详解
  • week1
  • EF Core 与 MySQL:迁移和关系配置详解
  • 《原子习惯》-读书笔记2
  • CF1626D 题解
  • Python 集合运算:并集、交集、差集全解析
  • 第一周数据可视化作业
  • 用 C++ + OpenCV + Tesseract 实现英文数字验证码识别
  • java 第一节课课前提问
  • 二进制解码器、选通器和分配器
  • 2025最新版 Photoshop软件免费下载安装完整教程(PS2025)超详细安装教程
  • nac一键卸载软件脚本
  • 交叉编译openharmony版本的openssh
  • 为什么不建议在 Docker 中跑 MySQL
  • CFD
  • [MCP][05]Elicitation示例
  • Warsaw主题关闭导航条
  • Python Socket网络编程(2)
  • PS2025安装包下载及PS2025安装包安装教程详细步骤(包含安装包下载链接)
  • Nature Genetics | 本周最新文献速递
  • 关于go里切片作为函数参数时是引用传递还是值传递
  • DRAN读写循环
  • 数据结构操作相关
  • Neisbitt 不等式的证法