java线程执行的两种情况

Java中线程可通过继承Thread类或实现Runnable接口创建。1. 继承Thread类需重写run()方法并调用start()启动,但受限于单继承;2. 实现Runnable接口将实例传给Thread构造函数,更灵活且支持资源共享,推荐使用。关键点:start()开启新线程,直接调用run()仅是普通方法调用。

Java中线程的执行主要通过两种方式来实现:继承 Thread 类和实现 Runnable 接口。这两种方式都能创建并启动线程,但在使用场景和设计灵活性上有所不同。

1. 继承Thread类

Thread 类本身实现了 Runnable 接口,因此可以通过继承 Thread 类并重写其 run() 方法来定义线程执行的内容。

使用步骤:

  • 创建一个类继承 Thread 类
  • 重写 run() 方法,编写线程要执行的任务
  • 创建该类的实例,并调用 start() 方法启动线程
注意:直接调用 run() 方法不会开启新线程,只是在当前线程中普通方法调用。

示例代码:

class MyThread extends Thread {
    public void run() {
        System.out.println("线程通过继承Thread执行");
    }
}
// 启动线程
MyThread t = new MyThread();
t.start(); // 正确启动方式

2. 实现Runnable接口

更推荐的方式是让类实现 Runnable 接口,并将该实例传给 Thread 构造函数。这种方式避免了单继承的限制,更适合实际开发。

使用步骤:

  • 定义类实现 Runnable 接口
  • 实现 run() 方法
  • 创建 Runnable 实现类的对象,并将其作为参数传递给 Thread 构造函数
  • 调用 Thread 对象的 start() 方法启动线程

示例代码:

class MyRunnable implements Runnable {
    public void run() {
        System.out.println("线程通过实现Runnable接口执行");
    }
}
// 启动线程
Thread t = new Thread(new MyRunnable());
t.start();

本上就这些。继承 Thread 的方式简单直观,但不具备扩展性;实现 Runnable 更灵活,便于资源共享和多线程协作,是更常用的方案。不复杂但容易忽略的是:真正启动线程的是 start(),不是 run()。