Java併發編程學習隨筆 (一) 使用run() 和 start()的差異

java多線程run()和start()的區別

當你啓動線程,使用start(),系統會把run()方法當成線程執行體來處理,這是正常的,也是正確的狀況。可是,當你啓動線程時,調用run()方法,系統run()方法會當即執行,可是這時候系統會把run()方法當成普通的方法,線程對象也當成一個普通對象。java

就是說 start 纔是真正的啓動了一個線程,run 只是座位當前線程的一個方法在執行多線程

此時運行狀況爲 A /B/C 三個線程輪流執行:ide

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()的狀況this

 

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();
	}

}

 

  

 

相關文章
相關標籤/搜索