java中通过实现runnable接口创建线程,需重写public void run()方法封装任务逻辑,再传入thread构造器并调用start()启动;支持lambda简化,但共享变量需注意线程安全。

Java 中通过实现 Runnable 接口创建线程,核心是把任务逻辑封装进 run() 方法,再交给 Thread 对象执行。这种方式比继承 Thread 类更灵活,也更符合面向对象设计原则。
定义一个类实现 Runnable 接口
需要重写 run() 方法,在其中编写线程要执行的代码:
- 方法签名必须是
public void run(),不能有返回值,也不能抛出受检异常(除非用 try-catch 包裹) - 该方法就是线程的入口点,类似 main 方法之于程序
- 示例:
class MyTask implements Runnable {
@Override
public void run() {
System.out.println("线程正在运行:" + Thread.currentThread().getName());
// 这里放具体任务逻辑,比如循环、IO、计算等
}
}
创建 Thread 对象并启动线程
把实现了 Runnable 的实例传给 Thread 构造器,再调用 start() 方法:
- 不要直接调用
run()—— 那只是普通方法调用,不会开启新线程 - 必须调用
start(),JVM 才会真正分配资源、调度执行 - 可以给线程命名,便于调试和日志追踪
public class Main {
public static void main(String[] args) {
MyTask task = new MyTask();
Thread thread = new Thread(task, "MyWorkerThread");
thread.start(); // 启动线程
}
}
使用 Lambda 表达式简化(Java 8+)
因为 Runnable 是函数式接口(只有一个抽象方法),可直接用 Lambda 写任务逻辑:
- 省去单独定义类的步骤,适合简单、一次性的任务
- 代码更简洁,语义更清晰
Thread t = new Thread(() -> {
System.out.println("Lambda 创建的线程:" + Thread.currentThread().getName());
});
t.start();
注意线程安全与共享变量
多个线程共用同一个 Runnable 实例时,如果访问了共享的可变状态(如实例字段),需考虑同步问题:
- 例如:多个线程执行同一个
Counter任务,对count++操作不是原子的 - 可用
synchronized、AtomicInteger或ReentrantLock等方式保护临界区 - 若任务无状态或只读,通常无需额外同步
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











