JAVA --- start 和 run 方法有什么区别?

在Java中,Thread类和Runnable接口是实现多线程编程的两个基本方式。Thread类提供了两个重要的方法:start()run()。虽然这两个方法都与线程的执行有关,但它们有着本质的区别。

run() 方法

  • 定义run()方法是Thread类和Runnable接口中的一个方法,用于定义线程的执行逻辑。
  • 调用方式run()方法可以直接调用,就像调用普通方法一样。
  • 行为:直接调用run()方法不会创建新的线程,而是在当前线程中执行run()方法的代码。
示例代码
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - " + i);
            try {
                Thread.sleep(1000); // 模拟耗时操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.run(); // 直接调用run()方法
    }
}

在这个示例中,thread.run()会在主线程中执行run()方法的代码,而不是创建新的线程。

start() 方法

  • 定义start()方法是Thread类中的一个方法,用于启动一个新的线程。
  • 调用方式start()方法必须调用,以启动新的线程。
  • 行为:调用start()方法会创建一个新的线程,并在新的线程中执行run()方法的代码。
示例代码
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - " + i);
            try {
                Thread.sleep(1000); // 模拟耗时操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start(); // 调用start()方法启动新线程
    }
}

在这个示例中,thread.start()会创建一个新的线程,并在新的线程中执行run()方法的代码。

区别总结

  • run()方法

    • 定义线程的执行逻辑。
    • 可以直接调用,不会创建新的线程。
    • 在当前线程中执行run()方法的代码。
  • start()方法

    • 用于启动新的线程。
    • 必须调用,以创建新的线程。
    • 在新的线程中执行run()方法的代码。

注意事项

  • 直接调用run()方法不会启动新的线程,而是会在当前线程中执行run()方法的代码,这通常不是预期的行为。
  • 调用start()方法会启动新的线程,并在新的线程中执行run()方法的代码,这是创建和启动线程的正确方式。

通过理解start()run()方法的区别,可以更好地掌握Java多线程编程的基本概念和使用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值