1. 程式人生 > 其它 >多執行緒-建立執行緒第二種方式-實現Runnable介面-細節和好處

多執行緒-建立執行緒第二種方式-實現Runnable介面-細節和好處

 1 package multithread2;
 2 
 3 /*
 4  * 建立執行緒的第一種方法:繼承Thread類
 5  * 
 6  * 建立執行緒的第二種方式:實現Runnable介面
 7  * 
 8  * 1,定義類實現Runnable介面。
 9  * 2,覆蓋介面中的run方法,將執行緒的任務程式碼封裝到run方法中。
10  * 3,通過Thread類建立執行緒物件,並將Runnable介面的子類物件作為Thread類的建構函式的引數進行傳遞。
11  *         為什麼?因為執行緒的任務都封裝在Runnable介面子類物件的run方法中。
12  *         所以要線上程物件建立時就必須明確要執行的任務。
13 * 4,呼叫執行緒物件的start方法開啟執行緒 14 * 15 * 16 * Runnable出現僅僅是將執行緒的任務進行物件的封裝 17 * 18 * 實現Runnable介面的好處: 19 * 1,將執行緒的任務從執行緒的子類中分離出來,進行了單獨的封裝。 20 * 按照面向物件的思想將任務的封裝成物件。 21 * 2,避免了java單繼承的侷限性。 22 * 23 * 所以,建立執行緒的第二種方式較為常用 24 * 25 */ 26 27 28 class Demo implements Runnable {//extends Fu {//如果自己本身有父類怎麼解決實現run方法呢?準備擴充套件Demo類的功能,讓其中的內容可以作為執行緒的任務
29 //通過介面的形式完成 30 31 public void run() { 32 show(); 33 } 34 public void show() { 35 for (int x = 0; x < 20; x++) { 36 System.out.println(Thread.currentThread().getName()+"...."+x); 37 } 38 } 39 } 40 public class
ThreadDemo { 41 42 public static void main(String[] args) { 43 // TODO Auto-generated method stub 44 Demo d = new Demo(); 45 Thread t1 = new Thread(d); 46 Thread t2 = new Thread(d); 47 t1.start(); 48 t2.start(); 49 // Demo d1 = new Demo(); 50 // Demo d2 = new Demo(); 51 // d1.start(); 52 // d2.start(); 53 } 54 55 } 56 57 58 class Thread{ 59 private Runnable r; 60 Thread(){ 61 62 } 63 Thread(Runnable r){ 64 this.r = r; 65 } 66 public void run() { 67 if (r!=null) { 68 r.run(); 69 } 70 71 } 72 public void start() { 73 run(); 74 } 75 } 76 77 78 class ThreadImpl implements Runnable{ 79 public void run() { 80 System.out.println("runnable run"); 81 } 82 83 } 84 ThreadImpl i = new ThreadImpl(); 85 Thread t = new Thread(i); 86 t.start(); 87 88 /* 89 class SubThread extends Thread{ 90 public void run() { 91 System.out.println("haha"); 92 } 93 } 94 SubThread s = new SubThread(); 95 s.start(); 96 */
ThreadDemo