侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

Java中创建线程的两种基本方式

2025-12-9 / 0 评论 / 4 阅读

题目

Java中创建线程的两种基本方式

信息

  • 类型:问答
  • 难度:⭐

考点

线程创建,Runnable接口,Thread类,线程启动

快速回答

Java创建线程的两种基本方式:

  • 继承Thread类:重写run()方法,直接实例化并调用start()启动
  • 实现Runnable接口:实现run()方法,将实例作为参数传递给Thread对象

关键注意事项:必须调用start()而非run()方法启动线程。

解析

1. 原理说明

Java线程创建的核心是java.lang.Thread类和java.lang.Runnable接口:

  • Thread类:线程的抽象表示,其run()方法定义线程执行逻辑
  • Runnable接口:函数式接口(单方法run()),提供更灵活的线程任务定义方式

2. 代码示例

方式一:继承Thread类

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

// 创建并启动线程
public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();  // 正确启动方式
    }
}

方式二:实现Runnable接口

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

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();  // 启动线程

        // Lambda简化写法(Java 8+)
        new Thread(() -> 
            System.out.println("Lambda线程: " + Thread.currentThread().getName())
        ).start();
    }
}

3. 最佳实践

  • 优先选择Runnable接口:避免单继承限制,更灵活地实现资源共享
  • 使用Lambda表达式:简化代码(尤其适用于短任务)
  • 线程命名:通过Thread.setName()或构造函数命名线程,便于调试

4. 常见错误

  • 错误调用run()方法:直接调用run()会在当前线程执行,不会启动新线程
  • 多次启动线程:一个线程实例只能调用一次start(),否则抛出IllegalThreadStateException
  • 资源竞争问题:多个线程共享数据时需同步(初级本题暂不涉及)

5. 扩展知识

  • 线程生命周期:新建(New)→ 就绪(Runnable)→ 运行(Running)→ 阻塞(Blocked)→ 终止(Terminated)
  • Executor框架:推荐使用ExecutorService替代直接创建线程(进阶内容)
  • Callable接口:带返回值的线程任务,需配合Future使用