java 线程启动的方式_Java多线程启动时调用的方法为什么是start,不是run?

码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210、210既

210

之意。

我们知道java有三种方式实现多线程,这里直接用继承的方式进行试验,其他方式同理。

我们要做的是首先声明一个线程。然后去调用,最终根据结果归纳run和start的区别。

定义一个线程类。

class MyThread extends Thread {

private String title;

public MyThread(String title) {

this.title = title;

}

@Override

public void run() {

for(int x = 0; x 

System.out.println(this.title + "运行,x = " + x);

}

}

}

在我们的主类中,起三个线程,看看调用的结果。代码如下:public class ExtendsThread {

public static void main(String[] args) {

new MyThread("线程A").start();

new MyThread("线程B").start();

new MyThread("线程C").start();

}

}

直接运行main方法。

观察结果我们发现,三个线程随机交替执行,取决于cpu的调度。

13ebee99920cdb54255d0e7de29343e6.png

我们再使用run方法来进行调用,查看结果public class ExtendsThread {

public static void main(String[] args) {

new MyThread("线程A").run();

new MyThread("线程B").run();

new MyThread("线程C").run();

}

}

结果如下:

534dbc60be25b61e8d070abf7c878181.png

看到这里细心的小伙伴发现了,这个run方法好像是顺序执行的啊!

的确是的,run方法并不会实现多线程。而是顺序执行。那么为什么会产生这样的结果呢?

根本原因

查看run方法的源代码

3f94d20813d844cb70ec385b5381d885.png

我们发现run方法只是简单的调用了实现类的run。没有进行任何的多线程处理。

查看start方法的源码

c81b87b6db5dc62bf4fc72262da9c74c.png

start方法就不一样了。我们可以看到关键的代码就是start0方法。var1理解为线程为启动,调用start0后,线程启动。继续追踪start0.

f4ff7969ffb248b491dff7447b96182f.png

这个是一个使用jni的java本地方法,jvm根据不同的平台,调度的线程方法不同。

借用一张网上图,一目了然。

8930b44e7b04687a203fa9ac3834f37f.png

start() 方法调用 start0() 方法后,该线程并不一定会立马执行,只是将线程变成了可运行状态。

具体什么时候执行,取决于 CPU ,由 CPU 统一调度。

总结

Java 中实现真正的多线程是 start 中的 start0() 方法,run() 方法只是一个普通的方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值