Thread使用start和run方法的区别

Java中,通过Thread.start()启动线程实现真正的多线程运行,使线程进入就绪状态,等待CPU调度执行run()。而直接调用Thread.run()则在主线程中执行,无法实现并发。start()会触发底层的start0()方法,创建新线程。传入的Runnable对象引用允许线程调用其实现的run()方法。
摘要由CSDN通过智能技术生成

相信Thread对我们来说并不陌生,学java的时候都是入门的东西,我们一般使用thread都是new一个线程,然后调用start方法启动,使用start方法才真正实现了多线程运行,因为这个时候不用等待我们的run方法执行完成就可以继续执行下面的代码,这才叫多线程嘛!因为thread线程有5种状态,创建-就绪-运行-阻塞-死亡这五种,那么我们的start方法呢就是就绪这一步,因为这个时候我们的线程并没有立即的执行,而是得等待,等到我们的cpu有空闲的时候,才会执行线程里面的run方法,等run方法执行完了,线程就结束了。

那么我们直接使用thread执行run方法会咋样呢?因为run方法是thread里面的一个普通的方法,所以我们直接调用run方法,这个时候它是会运行在我们的主线程中的,因为这个时候我们的程序中只有主线程一个线程,所以如果有两个线程,都是直接调用的run方法,那么他们的执行顺序一定是顺序执行,所以这样并没有做到多线程的这种目的。

public class ThreadTest {
   
    public static void main(String[] args) {
   
        new Thread(new printA()).start();
        new Thread(new printB()).start();

    }

}
class printA implements Runnable{
   
    @Override
    public void run() {
   
        try {
   
            for(int i=0;i<10;i++){
   
                System.out.println(Thread.currentThread().getName()+"-->"+"A");
                Thread.sleep(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值