java中用lambda创建线程需传入runnable接口实现,必须调用start()启动;可结合命名构造器调试;因run()不抛异常,受检异常须用try-catch包裹。

Java 中用 Lambda 表达式创建线程,核心是把 Runnable 接口的实现从匿名内部类压缩成一行简洁写法,省去模板代码,提升可读性。
直接传 Lambda 给 Thread 构造器
Thread 的构造方法接受一个 Runnable 参数。由于 Runnable 是函数式接口(只有一个抽象方法 run()),可以直接用 Lambda 替代:
- 传统写法(匿名内部类):
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello from thread");
}
}); - Lambda 写法(等价、更简):
new Thread(() -> System.out.println("Hello from thread")).start();
配合 start() 方法一起调用
Lambda 本身不执行,必须显式调用 start() 才真正启动线程:
- 正确(声明+启动一步到位):
new Thread(() -> {
System.out.println("Task running...");
try { Thread.sleep(1000); } catch (InterruptedException e) { }
}).start(); - 错误(只创建没启动,什么也不会发生):
new Thread(() -> System.out.println("Silent")); // 缺少 .start()
给线程命名便于调试
调试多线程时,线程名很重要。Lambda 无法直接命名,但可以结合带名称的构造器使用:
- 写法:
new Thread(() -> {
System.out.println("Running in " + Thread.currentThread().getName());
}, "Worker-1").start(); - 输出示例:
Running in Worker-1
避免在 Lambda 中抛出受检异常
Runnable.run() 方法签名不声明抛出任何异常,所以 Lambda 体内不能直接 throw IOException 等受检异常:
- ❌ 错误(编译不通过):
new Thread(() -> Files.readAllLines(Paths.get("a.txt"))).start(); - ✅ 正确(用 try-catch 包裹):
new Thread(() -> {
try {
Listlines = Files.readAllLines(Paths.get("a.txt"));
System.out.println(lines);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











