java中用lambda实现多线程任务的核心是用简洁语法传递runnable或callable逻辑:直接new thread(() -> {...})适合简单任务;推荐线程池submit/execute配合lambda;callable+lambda支持返回值与受检异常;parallelstream()提供隐式并行。

Java 中用 Lambda 表达式实现多线程任务,核心是把 Runnable 或 Callable 逻辑用简洁的 Lambda 写法传给线程或线程池,避免冗长的匿名内部类。
直接创建 Thread + Lambda
Thread 构造器接受一个 Runnable,Lambda 可以直接替代传统匿名类:
- new Thread(() -> { System.out.println("任务在新线程执行"); }).start();
- 注意:Lambda 体中不能抛出受检异常(如 IOException),否则需在内部 try-catch 处理
- 适合简单、一次性的小任务;不推荐频繁 new Thread,应优先使用线程池
用 ExecutorService 提交 Runnable 任务
更常用且规范的方式是配合线程池,用 submit(Runnable) 或 execute(Runnable):
- ExecutorService pool = Executors.newFixedThreadPool(3);
pool.submit(() -> {
System.out.println("线程池中执行:" + Thread.currentThread().getName());
}); - submit() 返回 Future>,可用于判断是否完成(但 Runnable 无返回值);execute() 更轻量,无返回值
- 记得调用 pool.shutdown() 释放资源,或用 try-with-resources(JDK 19+ 的 StructuredTaskScope 除外)
提交带返回值的任务(Callable + Lambda)
若任务需要返回结果并可能抛异常,用 Callable 配合 Lambda:
- Future
future = pool.submit(() -> {
Thread.sleep(1000);
return 42;
});
System.out.println(future.get()); // 阻塞获取结果 - Lambda 体中可抛出任意异常(包括受检异常),因为 Callable.call() 声明 throws Exception
- get() 会阻塞,生产环境建议设超时:future.get(3, TimeUnit.SECONDS)
并行流(Parallel Stream)——隐式多线程的 Lambda 应用
对集合做批量操作时,parallelStream() 底层用 ForkJoinPool,配合 Lambda 实现免手动线程管理:
- List
numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
.mapToInt(n -> {
System.out.println("处理 " + n + ",线程:" + Thread.currentThread().getName());
return n * n;
})
.sum(); - 适合 CPU 密集型、无状态、线程安全的操作;避免在 Lambda 中修改共享变量或依赖外部状态
- 不适用于 IO 等阻塞操作,也不保证执行顺序
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











