我觉得是因为run方法只是执行了同一线程中内容却不是启动一个新的线程,所以MP1为run的时候,就会先输出ONE两次,此时还是一个线程,所以不会到MP2执行。而为START时则启动了新的线程,进入SLEEP(),轮转到MP2执行,此时为多线程了。
我也是正在学JAVA多线程,这是我的理解,不知道对否。

解决方案 »

  1.   

    我对你的解释不赞同,因为run 方法去调run时它自己本身不是线程,此时只是一个普通的函数调用,并不是线程中的run方法。照你的说法那当mp2为run时,它为什么会输出two后就输出one呢?
    而不是输出:two two one one呢??
      

  2.   

    要知道,main 也是一个线程,这是绝对没错的概念,如果你也这样想的话,在你的main中调用run方法——而不是strat,那你的程序也有两个线程了,而他们争夺的是运行时间片,print出的什么one two one two.... 只是随机罢了。