java中thread的start()和run()有何区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中thread的start()和run()有何区别?相关的知识,希望对你有一定的参考价值。
要是用start()的话,不是也要再调用thread的run()方法么?
那如果写一个
class secThread extends Thread
void run()
//......
public class exThread
public static void main(String args[])
secThread st= new secThread();
st.start();
这里用st.start()和st.run()有什么区别么?
运行效率?接续结构化?逻辑性?或者别的什么?
小弟新手,诚心求解,先拜谢了
1、start()方法来启动线程,真正实现了多线程运行,这时无需等待。
run方法体代码执行完毕而直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
通过Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。
2、run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码;
而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
3、调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
4、这两个方法需要把并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。
扩展资料:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。
通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
参考资料来源:百度百科-java基础
参考技术AJava中thread的start和run在功能、是否创建新线程、和是否在新线程重复调用上有所区别:
1、功能不同
run是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的。
start则是线程开始运行的标志,当这个方法被调用后,程序中才会多出一个独立的线程,接着便是执行run方法。
2、是否会创建新线程
run方法的时候,程序并不会创建新线程,run方法内部的代码将在当前线程上运行。
start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行。
3、新线程启用是是否能重复调用
run可以在一个线程被启动,可以重复调用该thread对象的run方法。
start在一个线程被启动,你不能重复调用该thread对象的start方法,调用已经启动线程的start方法将会报IllegalStateException异常。
总结:如果要写单独的线程,最好还是继承Thread来做,如果是实现接口的话,到主线程里,还是要new Thread(new YourRunnableClass)来调用,可能会有所不便。
参考资料:百度百科 线程
参考技术B1、运行的方式不同:
(1)start()方法来启动线程,真正实现了多线程运行,这时无需等待;
(2)run()方法当作普通方法的方式调用,程序还是要顺序执行。
2、run方法的实现不同:
(1)start()的run方法体代码执行完毕而直接继续执行下面的代码;
(2)run()的要等待run方法体执行完毕后才可继续执行下面的代码。
3、线程的不同:
(1)start()通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行;
(2)run方法只是thread的一个普通方法调用,还是在主线程里执行。
扩展资料
1、run方法:不启动新线程
public void run() if (target != null)
target.run();
2、start()方法:启动一个线程
public synchronized void start()
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try
start0();
started = true;
finally
try
if (!started)
group.threadStartFailed(this);
catch (Throwable ignore)
private native void start0();
参考技术C 1) start:用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。 参考技术D start为线程入口,通过它启动线程,其源代码
public synchronized void start()
if (started)
throw new IllegalThreadStateException();
started = true;
group.add(this);
start0();
run为实际代码执行段
如果在程序中直接调用run的话就变成了普通方法,因为没有将它加入到线程组中
如果你用run,就会发现程序会假死,因为它只是一个常规方法的调用,还是用的main这个线程
Java Thread中,run方法和start方法的区别
两种方法的区别:
1.start方法
用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
2.run方法
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
以上是关于java中thread的start()和run()有何区别?的主要内容,如果未能解决你的问题,请参考以下文章
Java基础加强之并发Thread中start()和run()的区别
Java多线程系列 基础篇03 Thread中start()和run()的区别