以下是Java ExecutorService在实际项目中的几个典型应用案例:
在Java Web应用中,可使用ExecutorService处理耗时任务(如发送邮件、生成报表),避免阻塞主线程。
案例:用户注册后异步发送欢迎邮件。
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> sendWelcomeEmail(userEmail));
executor.shutdown();
通过线程池限制并发请求数,防止系统过载。
案例:电商平台的秒杀接口限流。
newFixedThreadPool设置固定线程数(如100),控制同时处理秒杀请求的线程量。ExecutorService executor = Executors.newFixedThreadPool(100);
for (int i = 0; i < 1000; i++) {
executor.submit(() -> processSeckillRequest(request));
}
executor.shutdown();
将大任务拆分为多个子任务并行执行,提升处理效率。
案例:大数据量的数据统计(如订单金额汇总)。
ExecutorService executor = Executors.newFixedThreadPool(4);
List<Future<Integer>> futures = new ArrayList<>();
for (int i = 0; i < 10000; i += 1000) {
int start = i, end = i + 1000;
futures.add(executor.submit(() -> sumOrders(start, end)));
}
int total = futures.stream().mapToInt(future -> {
try { return future.get(); } catch (Exception e) { return 0; }
}).sum();
executor.shutdown();
利用ScheduledExecutorService实现周期性任务(如日志清理、缓存刷新)。
案例:每天凌晨清理过期日志。
newScheduledThreadPool设置定时任务。ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> cleanExpiredLogs(), 0, 1, TimeUnit.DAYS);
将计算密集型任务分解为多个子任务并行计算,缩短处理时间。
案例:计算大数组的斐波那契数列。
ExecutorService executor = Executors.newFixedThreadPool(8);
Future<Long> future = executor.submit(() -> computeFibonacci(10000));
System.out.println("Result: " + future.get());
executor.shutdown();
shutdown()关闭线程池,避免资源泄漏。Future.get()捕获任务执行异常,确保程序健壮性。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。