java匿名内部类可快速创建线程,通过实现runnable接口或继承thread类,适合单次简单任务;能访问final或事实final局部变量;lambda表达式更简洁,推荐新项目使用。

Java 匿名内部类能快速创建并启动线程,省去单独定义类的步骤,特别适合逻辑简单、只用一次的多线程场景。
直接实现 Runnable 接口
无需新建类文件,把任务逻辑写在 new Runnable() { ... } 中,再传给 Thread 构造器:
- 重写
run()方法,写具体执行逻辑 - 用
new Thread(runnable).start()启动 - 适合无返回值、不需复用的任务,比如日志打印、定时轮询
继承 Thread 类(较少推荐)
可直接 new Thread() { public void run() { ... } }.start():
- 跳过接口实现,语法更短,但 Java 不支持多重继承,限制后续扩展
- 无法再继承其他类,也不利于任务与线程解耦
- 仅建议用于极简 demo 或临时调试
访问外部变量的注意事项
匿名内部类能访问所在方法的 final 或事实 final 局部变量:
- 变量一旦赋值就不能再改(编译器会检查)
- 若需在线程中修改状态,可用数组(如
int[] flag = {0})或原子类(如AtomicInteger) - 成员变量和静态变量可直接访问,无限制
对比 Lambda 表达式(Java 8+)
当 Runnable 只有一个抽象方法时,Lambda 更简洁:
new Thread(() -> System.out.println("Hello")).start();- 语义更清晰、代码更紧凑,推荐新项目优先使用
- 匿名内部类仍有价值:需要调用
this、初始化块、多个方法重写等复杂逻辑时
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











