示例1:使用ScheduledExecutorService进行定时任务调度
import java.util.concurrent.*;
public class ScheduledExecutorServiceExample {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
Runnable task = () -> System.out.println("Executing Task at " + System.nanoTime());
scheduledExecutorService.scheduleAtFixedRate(task, 0, 2, TimeUnit.SECONDS);
try {
Thread.sleep(10000); // 让调度执行一段时间
} catch (InterruptedException e) {
e.printStackTrace();
}
scheduledExecutorService.shutdown();
}
}
示例2:使用线程池执行大量任务并等待其完成
import java.util.concurrent.*;
public class BulkTaskExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
Callable<String> task = () -> {
TimeUnit.SECONDS.sleep(1);
return Thread.currentThread().getName();
};
List<Future<String>> futures = new ArrayList<>();
for (int i = 0; i < 20; i++) {
futures.add(executorService.submit(task));
}
futures.forEach(future -> {
try {
System.out.println(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
executorService.shutdown();
}
}
思维导图
+------------------------------------------------------+
| Java线程池ExecutorService学习和使用 |
+------------------------------------------------------+
|
+-----------------------------+
| 一、概述 |
+-----------------------------+
|
+-----------------------------+
| 二、基本概念 |
+-----------------------------+
|
+-----------------------------+
| 三、常用方法 |
| 1. 提交任务 |
| 2. 关闭线程池 |
| 3. 获取线程池状态 |
| 4. 批量提交任务 |
+-----------------------------+
|
+-----------------------------+
| 四、线程池的创建 |
| 1. 固定大小线程池 |
| 2. 单线程线程池 |
| 3. 可缓存线程池 |
| 4. 定时线程池 |
+-----------------------------+
|
+-----------------------------+
| 五、使用示例 |
+-----------------------------+
|
+-----------------------------+
| 六、线程池配置 |
| 1. 核心线程数和最大线程数 |
| 2. 自定义拒绝策略 |
| 3. 钩子函数 |
+-----------------------------+
|
+-----------------------------+
| 七、实战示例 |
| 示例1:定时任务调度 |
| 示例2:执行大量任务并等待完成|
+-----------------------------+
总结
通过学习和使用Java中的 ExecutorService
,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 ExecutorService
,实现更高效的并发程序。