简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
🌻1. 前言
本篇目的:Java进阶之线程池SingleThreadExecutor:用法实例
🌻2. Java线程池SingleThreadExecutor介绍
-
基本概念
SingleThreadExecutor
是Java并发包(java.util.concurrent
)中的一个线程池实现,提供单线程的线程池。SingleThreadExecutor
通过Executors.newSingleThreadExecutor
方法创建,确保所有任务都在同一个线程中顺序执行。
-
功能
- 提供单线程的线程池,确保任务按提交顺序执行。
- 支持任务的提交和执行,确保线程安全。
-
使用限制
SingleThreadExecutor
的线程数量固定为1,适用于需要顺序执行任务的场景。- 适用于任务数量较多但需要顺序执行的场景。
-
性能特性
SingleThreadExecutor
通过单线程顺序执行任务,减少线程切换的开销。- 合理使用
SingleThreadExecutor
可以提高程序的性能和响应性。
-
使用场景
- 广泛应用于需要顺序执行任务的场景。
- 特别适用于任务数量较多但需要顺序执行的场景。
🌻3. 代码实例
🌻3.1 使用SingleThreadExecutor执行任务
-
应用场景
- 使用
SingleThreadExecutor
执行多个任务,确保任务按提交顺序执行。
- 使用
-
用法实例
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadExecutorExample { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 5; i++) { int taskNumber = i; executor.submit(() -> { System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName()); }); } executor.shutdown(); } }
输出:
Task 0 is running on thread pool-1-thread-1
Task 1 is running on thread pool-1-thread-1
Task 2 is running on thread pool-1-thread-1
Task 3 is running on thread pool-1-thread-1
Task 4 is running on thread pool-1-thread-1
🌻3.2 使用SingleThreadExecutor处理异常
-
应用场景
- 使用
SingleThreadExecutor
处理任务中的异常。
- 使用
-
用法实例
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadExecutorExceptionHandlingExample { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 5; i++) { int taskNumber = i; executor.submit(() -> { try { if (taskNumber == 2) { throw new RuntimeException("Task " + taskNumber + " failed"); } System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName()); } catch (RuntimeException e) { System.out.println("Exception in task " + taskNumber + ": " + e.getMessage()); } }); } executor.shutdown(); } }
输出:
Task 0 is running on thread pool-1-thread-1
Task 1 is running on thread pool-1-thread-1
Exception in task 2: Task 2 failed
Task 3 is running on thread pool-1-thread-1
Task 4 is running on thread pool-1-thread-1
🌻3.3 使用SingleThreadExecutor执行带返回值的任务
-
应用场景
- 使用
SingleThreadExecutor
执行带返回值的任务。
- 使用
-
用法实例
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class SingleThreadExecutorCallableExample { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future1 = executor.submit(() -> "Result from task 1"); Future<String> future2 = executor.submit(() -> "Result from task 2"); System.out.println("Result 1: " + future1.get()); System.out.println("Result 2: " + future2.get()); executor.shutdown(); } }
输出:
Result 1: Result from task 1
Result 2: Result from task 2
🌻3.4 线程池SingleThreadExecutor总结
关键词 | 功能描述 | 典型应用 |
---|---|---|
SingleThreadExecutor | 单线程的线程池 | 提供单线程的线程池,确保任务按提交顺序执行 |
Executors.newSingleThreadExecutor | 创建单线程的线程池 | 适用于任务数量较多但需要顺序执行的场景 |
submit | 提交任务到线程池 | 提交任务并返回Future对象,用于获取任务结果 |
shutdown | 关闭线程池 | 停止接受新任务,等待现有任务完成 |
性能特性 | 单线程顺序执行任务 | 适用于任务数量较多但需要顺序执行的场景 |