Java 多线程解决方案模板
📚 方案概览
本方案采用 ExecutorService 线程池 + Callable 接口实现多线程任务处理,包含以下核心组件:
- 线程池管理 - 控制并发线程数量
- 任务拆分机制 - 支持动态任务分配
- 结果聚合 - 使用
Future收集处理结果 - 异常处理 - 统一捕获任务执行异常
🛠 实现代码
import java.util.*;
import java.util.concurrent.*;
public class MultiThreadSolution {
// 线程池配置参数
private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors();
private static final int MAX_POOL_SIZE = CORE_POOL_SIZE * 2;
private static final long KEEP_ALIVE_TIME = 60L;
private static final int QUEUE_CAPACITY = 1000;
public static void main(String[] args) {
// 1. 创建线程池
ExecutorService executor = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAX_POOL_SIZE,
KEEP_ALIVE_TIME,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(QUEUE_CAPACITY),
new ThreadPoolExecutor.CallerRunsPolicy()
);
// 2. 创建任务集合
List<Callable<String>> tasks = createTasks(10);
try {
// 3. 提交任务并获取Future集合
List<Future<String>> futures = executor.invokeAll(tasks);
// 4. 处理任务结果
for (Future<String> future : futures) {
try {
System.out.println("处理结果: " + future.get());
} catch (ExecutionException e) {
System.err.println("任务执行异常: " + e.getCause().getMessage());
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
// 5. 关闭线程池
executor.shutdown();
try {
if (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
executor.shutdownNow();
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
}
}
private static List<Callable<String>> createTasks(int taskCount) {
List<Callable<String>> tasks = new ArrayList<>();
for (int i = 1; i <= taskCount; i++) {
final int taskId = i;
tasks.add(() -> {
// 模拟业务处理逻辑
Thread.sleep(new Random().nextInt(500));
return "任务[" + taskId + "]完成,线程: " + Thread.currentThread().getName();
});
}
return tasks;
}
}
8822

被折叠的 条评论
为什么被折叠?



