Java多線程系列-start()和run方法的區別
阿新 • • 發佈:2018-10-12
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方法的區別