1. 程式人生 > >Java多線程系列-start()和run方法的區別

Java多線程系列-start()和run方法的區別

java多線 情況下 pub -s name println get system runt

  • start()和run是Thread類裏面的兩個方法。
    學過的都知道,我們創建了一個線程類,通過調用start()方法來啟動線程,並且該線程會執行內部的run()方法,那麽我們可以直接調用run()方法嗎。
    答案顯而易見,當然是可以啊,可是前後兩者還是有本質的區別的。

start()run()

  • 調用start()方法,會創建一個新的線程,而這個新的線程會執行Thread類中的run方法
  • 調用run()方法,不會創建新的線程,而是直接在當前的線程直接執行該方法。

以上就是這兩個方法的本質區別,並且大多數情況下,直接調用run()的錯誤的。

public class StartAndRunTest {

    private static class MyThread extends Thread{

        private String name;

        public MyThread(String name) {
            this.name = name;
        }

        @Override
        public void run() {
            System.out.println(name+" running in "+Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        MyThread m1=new MyThread("m1");
        MyThread m2=new MyThread("m2");

        m1.start();
        m2.run();
    }

}
/*
m2 running in main
m1 running in Thread-0
*/

上面的例子你可以看到,調用start的Thread類在新的線程上執行run方法,而直接調用run()方法的則是在當前main線程。(一個線程不能重復start(),具體可以看內部實現)

Java多線程系列-start()和run方法的區別