1. 程式人生 > >執行緒的兩種建立方式:Thread類和Runnable介面,它們都要複寫run方法

執行緒的兩種建立方式:Thread類和Runnable介面,它們都要複寫run方法

/*執行緒:
 * 1.如何在自定義的程式碼中,自定義一個執行緒呢?
 * 
 * 通過對API的查詢,java已提供了對執行緒這類事物的描述。就是Thread類
 * 
 * 建立執行緒的第一種方式:繼承Thread類。
 * 步驟:
 * 1.定義類繼承Thread。
 * 2.複寫Thread中的run方法,讓執行緒執行。
 * 		目的:將自定義方法儲存在run方法中,讓執行緒執行。
 * 3.呼叫執行緒的start方法
 *      該方法有兩個作用:啟動執行緒和呼叫run方法。
 * 
 * 建立執行緒的第二種方式:實現Runnable介面。
 * 步驟:
 * 1.定義類實現Runnable。
 * 2.複寫Runnable中的run方法
 * 3.new一個Thread類,將自定義類丟進去。再呼叫該類的start方法啟動執行緒
 * 
 * 發現執行結果每一次都不同。
 * 因為多個執行緒都獲取CPU的執行權。CPU執行到誰,誰就執行。
 * 明確一點來說,就是在某一時刻,只能有一個程式在執行。(多核CPU除外)
 * CPU在做著快速的切換,以達到看上去是現行在執行的效果。
 * 我們可以形象的把多執行緒的執行行為理解為它們在互相爭奪CPU的執行權。
 * 
 * 這就是多執行緒的一個特性:隨機性。誰搶到誰執行,至於執行多長時間CPU說了算。
 * 
 * 為什麼要覆蓋run方法呢?
 * 
 * Thread類用於描述執行緒。
 * 該類就定義了一個功能,用於儲存執行緒要執行的程式碼。該儲存功能就是run方法。
 * 
 * 也就是說Thread類中的run方法,用於儲存執行緒要執行的程式碼。
 * 
 * 以下示例中應該有4個執行緒
 * 1.主方法執行執行緒,存在main方法中
 * 2.jvm的記憶體垃圾回收機制,程式邊執行,它邊執行。
 * 3.自定義的Demo1執行緒
 * 4.自定義的Demo2執行緒
 * 
 */
public class Thread_Demo1 {

	public static void main(String[] args) {
		// 例項化自定義類
		Demo1 d1 = new Demo1();
		Demo2 d2 = new Demo2();

		// 啟動執行緒
		d1.start();
		new Thread(d2).start();

		for (int i = 0; i < 500; i++) {
			System.out.println("main----" + i);
		}

	}

	// 自定義一個類繼承Thread類
	public static class Demo1 extends Thread {

		public void run() {
			for (int i = 0; i < 500; i++) {
				System.out.println("Demo1----" + i);
			}
		}
	}

	// 自定義一個類實現Runnable介面
	public static class Demo2 implements Runnable {
		// 現實run方法
		public void run() {
			for (int i = 0; i < 500; i++) {
				System.out.println("Demo2----" + i);
			}
		}
	}
}