首先 ,多线程程序Thread对象是不会直接调用run()方法的。直接调用run()方法不会产生新线程,只是相当于普通方法的调用,所以结果就

解决方案 »

  1.   

    调用run是普通方法,还是在main线程运行。是串行执行,休眠也不影响。start是告诉虚拟机启动一个新的线程(这样就有两个线程)。由于这个线程中有休眠1S,那么main线程后续代码99.9999999999%会先执行。
      

  2.   

    start是启动线程,而run方法里才是线程执行的内容吧。。
      

  3.   

    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();多线程的实现需要依靠底层操作系统的支持。
      

  4.   

    start方法是使该线程开始执行;Java 虚拟机开始调用该线程的 run 方法。 
    run方法:如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。也就是说,语法规定线程run方法的内容就是要执行的操作,run只是个代号,start才是开始调用run方法的真正入口。具体详见jdk帮助文档。
      

  5.   

    run()相当于在主线程中运行run()函数,而start()相当于另外开一个线程运行run()函数。
      

  6.   

    start告诉jvm要启动一个线程,之后自动调用其run方法。run()可以把它理解为仅仅是一个方法!
      

  7.   

    main本身就是一个线程,启动线程用start,但不一定执行,知识让线程处于可运行状态,run才是真正调度的。