java中多线程执行时,为何调用的是start()方法而不是run()方法

Posted heqiyoujing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中多线程执行时,为何调用的是start()方法而不是run()方法相关的知识,希望对你有一定的参考价值。

Thead类中start()方法和run()方法的区别 
1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。 

2,run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

3,把需要处理的代码放到run()方法中,start()方法启动线程将自动调用run()方法,这个由java的内存机制规定的。并且run()方法必需是public访问权限,返回值类型为void。

4,当程序调用start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行

参考:java中多线程执行时,为何调用的是start()方法而不是run()方法

以上是关于java中多线程执行时,为何调用的是start()方法而不是run()方法的主要内容,如果未能解决你的问题,请参考以下文章

java多线程的问题为何输出结果只有一个?

java 的 Runnable 是个接口,既然是个接口就没有 可执行的方法。 那么为何它还能启动线程呢,请高手解答--

为何只能在其关联的线程内启动timer?(Qt会检查一致性,否则就不执行)

JAVA线程死锁

Java面试题多线程的创建

Java中多线程的使用!!