多執行緒-多執行緒方式1的程式碼實現

ZHOU_VIP發表於2017-05-30

package cn.itcast_02;

/*
 * 該類要重寫run()方法,為什麼呢?
 * 不是類中的所有程式碼都需要被執行緒執行的。
 * 而這個時候,為了區分哪些程式碼能夠被執行緒執行,java提供了Thread類中的run()用來包含那些被執行緒執行的程式碼。
 */
public class MyThread extends Thread {

	@Override
	public void run() {
		// 自己寫程式碼
		// System.out.println("好好學習,天天向上");
		// 一般來說,被執行緒執行的程式碼肯定是比較耗時的。所以我們用迴圈改進
		for (int x = 0; x < 200; x++) {
			System.out.println(x);
		}
	}

}


package cn.itcast_02;

/*
 * 需求:我們要實現多執行緒的程式。
 * 如何實現呢?
 * 		由於執行緒是依賴程式而存在的,所以我們應該先建立一個程式出來。
 * 		而程式是由系統建立的,所以我們應該去呼叫系統功能建立一個程式。
 * 		Java是不能直接呼叫系統功能的,所以,我們沒有辦法直接實現多執行緒程式。
 * 		但是呢?Java可以去呼叫C/C++寫好的程式來實現多執行緒程式。
 * 		由C/C++去呼叫系統功能建立程式,然後由Java去呼叫這樣的東西,
 * 		然後提供一些類供我們使用。我們就可以實現多執行緒程式了。
 * 那麼Java提供的類是什麼呢?
 * 		Thread
 * 		通過檢視API,我們知道了有兩種方式實現多執行緒程式。
 * 
 * 方式1:繼承Thread類。
 * 步驟
 * 		A:自定義類MyThread繼承Thread類。
 * 		B:MyThread類裡面重寫run()?
 * 			為什麼是run()方法呢?
 * 		C:建立物件
 * 		D:啟動執行緒
 */
public class MyThreadDemo {
	public static void main(String[] args) {
		// 建立執行緒物件
		// MyThread my = new MyThread();

		// my.run();
		// my.run();
		
		// 呼叫run()方法為什麼是單執行緒的呢?
		// 因為run()方法直接呼叫其實就相當於普通的方法呼叫,所以你看到的是單執行緒的效果
		// 要想看到多執行緒的效果,就必須說說另一個方法:start()
		
		// 面試題:run()和start()的區別?
		// run():僅僅是封裝被執行緒執行的程式碼,直接呼叫是普通方法
		// start():首先啟動了執行緒,然後再由jvm去呼叫該執行緒的run()方法。
		// MyThread my = new MyThread();
		// my.start();
		// IllegalThreadStateException:非法的執行緒狀態異常
		// 為什麼呢?因為這個相當於是my執行緒被呼叫了兩次。而不是兩個執行緒啟動。
		// my.start();

		// 建立兩個執行緒物件
		MyThread my1 = new MyThread();
		MyThread my2 = new MyThread();

		my1.start();
		my2.start();
	}
}




相關文章