java多線程run()和start()的區別
當你啓動線程,使用start(),系統會把run()方法當成線程執行體來處理,這是正常的,也是正確的情況。但是,當你啓動線程時,調用run()方法,系統run()方法會立即執行,但是這時候系統會把run()方法當成普通的方法,線程對象也當成一個普通對象。
就是說 start 纔是真正的啓動了一個線程,run 只是座位當前線程的一個方法在執行
此時運行情況爲 A /B/C 三個線程輪流執行:
public class ThreadTest extends Thread { private int a =1; @Override public void run() { // TODO Auto-generated method stub super.run(); while(true) { System.out.println("由"+this.currentThread().getName()); } } public ThreadTest(String name) { super(); this.setName(name); } }
public class RunTest { public static void main(String[] args) { ThreadTest threadTest1 = new ThreadTest("A"); ThreadTest threadTest2 = new ThreadTest("B"); ThreadTest threadTest3 = new ThreadTest("C"); threadTest1.start(); threadTest2.start(); threadTest3.start(); } }
使用run()的情況
public class RunTest { public static void main(String[] args) { ThreadTest threadTest1 = new ThreadTest("A"); ThreadTest threadTest2 = new ThreadTest("B"); ThreadTest threadTest3 = new ThreadTest("C"); threadTest1.run(); threadTest2.run(); threadTest3.run(); } }