java中lambda表达式简化runnable线程创建,核心是将冗长匿名类压缩为一行代码:()表示无参,->为操作符,右侧为run方法体;支持捕获final或事实final变量,配合线程池更实用。

Java 中 Lambda 表达式简化线程创建,核心是把 Runnable 的实现从 5~6 行匿名类压缩成一行可读代码,直接聚焦“要做什么”,省去接口名、方法声明和模板结构。
基础写法:一行替代匿名内部类
传统写法需显式实现 Runnable 接口的 run() 方法,哪怕只打印一句话,也要写:
new Thread(new Runnable() {<br> @Override<br> public void run() {<br> System.out.println("Hello from thread");<br> }<br>}).start();
用 Lambda 后,等价写法只需一行:
new Thread(() -> System.out.println("Hello from thread")).start();
说明:
-
() 表示无参,对应
run()方法签名 - -> 是 Lambda 操作符,分隔参数与逻辑
-
右侧表达式 就是
run()的全部内容;单语句可省略大括号和分号
多行逻辑:用大括号包裹语句块
当线程内需要执行多个操作时,把逻辑包在 {} 中即可:
new Thread(() -> {<br> System.out.print("Start: ");<br> System.out.println(Thread.currentThread().getName());<br>}).start();
注意:此时大括号不能省略,且每条语句末尾仍需分号。
捕获外部变量:支持 final 或事实 final
Lambda 可直接访问所在作用域中未被修改的局部变量(即 final 或事实 final):
String msg = "Task completed";<br>new Thread(() -> System.out.println(msg)).start(); // ✅ 正确
但以下写法会编译失败:
String msg = "Done";<br>msg = "Changed"; // 破坏了事实 final<br>new Thread(() -> System.out.println(msg)).start(); // ❌ 编译错误
如需在线程中更新状态,推荐使用 AtomicInteger、AtomicReference 或封装到对象中。
配合线程池使用更实用
单独 new Thread() 不利于资源管理,Lambda 在线程池场景下优势更明显:
ExecutorService pool = Executors.newFixedThreadPool(2);<br>pool.submit(() -> {<br> System.out.println("Running in pool thread");<br> doWork();<br>});
相比传统 new Runnable() { ... },Lambda 让任务定义轻量、内聚,也便于复用和测试。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











