Java中线程启动:start()与run()方法的区别

Java中线程启动:start()与run()方法的区别


💖The Begin💖点点关注,收藏不迷路💖

线程是并发执行的基本单位,而Thread类则是实现多线程编程的核心。在使用Thread类或其子类创建线程时,start()run()是两个至关重要的方法,但它们的作用和调用方式却大相径庭。

1. start()方法

作用start()方法用于启动线程,使线程从新建状态(NEW)进入就绪状态(RUNNABLE),等待JVM的调度执行。一旦线程被启动,它将执行其run()方法中的代码。

关键特性

  • 调用start()后,线程的执行由JVM调度,具体何时执行、执行顺序均不确定。
  • 每个线程只能被启动一次,多次调用start()会抛出IllegalThreadStateException
  • start()是异步的,即调用后立即返回,线程在后台执行。

2. run()方法

作用run()方法是线程的主体,包含了线程需要执行的代码。但直接调用run()方法并不会启动新线程,而是像调用普通方法一样在当前线程中同步执行run()方法体内的代码。

关键特性

  • run()方法可以被直接调用,但这样做并不会创建新的线程,而是直接在调用它的线程中执行。
  • 如果想要在新线程中执行run()方法中的代码,必须通过start()方法启动线程。
  • run()方法的执行是同步的,即调用后等待其执行完成才继续执行后续代码(但这仅针对直接调用run()的情况,通过start()启动线程则不会阻塞)。

3、总结

1、简而言之,start()方法用于启动线程,让线程进入就绪状态等待JVM调度执行其run()方法中的代码;

2、而直接调用run()方法则是在当前线程中同步执行run()方法体内的代码,不会创建新线程。

4、示例对比

// 1、使用start()方法启动线程  
Thread thread = new Thread(() -> {  
    System.out.println("线程运行中...");  
});  
thread.start(); // 正确启动线程  
  
// 2、直接调用run()方法  
Thread thread2 = new Thread(() -> {  
    System.out.println("这不是新线程,是直接在主线程中执行");  
});  
thread2.run(); // 直接在当前线程(主线程)中执行run()方法
  

在上面的示例中,thread.start()会启动一个新线程来执行打印操作,而thread2.run()则直接在主线程中执行打印操作,不会创建新线程。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Seal^_^

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

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

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

打赏作者

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

抵扣说明:

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

余额充值