Java多线程中start和run的区别
http://blog.csdn.net/cloudeagle_bupt/article/details/17202287写在这里,求指导,为啥呢? --------------------编程问答-------------------- 首先 ,多线程程序Thread对象是不会直接调用run()方法的。直接调用run()方法不会产生新线程,只是相当于普通方法的调用,所以结果就 --------------------编程问答-------------------- 调用run是普通方法,还是在main线程运行。是串行执行,休眠也不影响。
start是告诉虚拟机启动一个新的线程(这样就有两个线程)。由于这个线程中有休眠1S,那么main线程后续代码99.9999999999%会先执行。 --------------------编程问答-------------------- start是启动线程,而run方法里才是线程执行的内容吧。。 --------------------编程问答-------------------- 一楼正解。。。。。。。 --------------------编程问答-------------------- public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
start0();
if (stopBeforeStart) {
stop0(throwableFromStop);
}
}
private native void start0();
多线程的实现需要依靠底层操作系统的支持。 --------------------编程问答-------------------- start方法是使该线程开始执行;Java 虚拟机开始调用该线程的 run 方法。
run方法:如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
也就是说,语法规定线程run方法的内容就是要执行的操作,run只是个代号,start才是开始调用run方法的真正入口。
具体详见jdk帮助文档。
--------------------编程问答-------------------- run()相当于在主线程中运行run()函数,而start()相当于另外开一个线程运行run()函数。 --------------------编程问答-------------------- start告诉jvm要启动一个线程,之后自动调用其run方法。run()可以把它理解为仅仅是一个方法! --------------------编程问答-------------------- main本身就是一个线程,启动线程用start,但不一定执行,知识让线程处于可运行状态,run才是真正调度的。
补充:Java , Java SE