Java创建线程的3种方式简单易懂

0 阅读1分钟

Java 创建线程的 3 种方式

1. 继承 Thread 类

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        t1.start();  // 启动线程
    }
}

特点

  • 简单直接,但 Java 是单继承,继承了 Thread 就不能再继承其他类。
  • 通过 start() 启动线程,run() 方法定义线程任务。

2. 实现 Runnable 接口

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable());
        t1.start();
    }
}

特点

  • 避免了单继承的限制,可以实现多个接口。
  • 任务与线程分离,更灵活,推荐使用。

3. 实现 Callable 接口(配合 FutureTask)

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "线程返回结果:" + Thread.currentThread().getName();
    }

    public static void main(String[] args) throws Exception {
        MyCallable task = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<>(task);
        Thread t1 = new Thread(futureTask);
        t1.start();
        
        // 获取线程执行后的返回结果
        String result = futureTask.get();
        System.out.println(result);
    }
}

特点

  • 可以获取线程执行后的返回结果(通过 FutureTask)。
  • 允许抛出异常,比 Runnable 更强大。

总结对比

方式

是否有返回值

是否可抛出异常

推荐场景

继承 Thread

简单临时任务

实现 Runnable

任务与线程分离,常用

实现 Callable

需要返回结果或处理异常

提示:实际开发中更常用线程池(如 ExecutorService)来管理线程,但理解这三种基础方式对掌握并发编程非常重要。