当前位置:编程学习 > JAVA >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,