1. 程式人生 > >Java基礎-建立執行緒的三種方法

Java基礎-建立執行緒的三種方法

1.繼承Thread類

1)定義Thread類的子類,並重寫run方法,run方法就是執行緒要執行的任務,將其稱為執行體。

2)建立Thread類子類的物件,即建立了執行緒物件。

3)呼叫執行緒物件的start()方法來啟動該執行緒。

此方法需要覆蓋掉其中的run()方法。

 1 public class MyThread extends Thread {
 2     
 3     public MyThread(){}
 4 
 5     // set name
 6     public MyThread(String name){
 7         super(name);
8 } 9 10 @Override 11 public void run(){ 12 System.out.println(Thread.currentThread().getName()); 13 } 14 }

2.建立實現runnable介面的類物件

1)定義runnable介面的實現類,並重寫該介面的run()方法,該run()方法的方法體同樣是該執行緒的執行緒執行體。

2)建立 Runnable實現類的例項,並依此例項作為Thread的target來建立Thread物件,該Thread物件才是真正的執行緒物件

3)呼叫執行緒物件的start()方法來啟動該執行緒

   與Thread方法相比較,1)Runnable方法更加靈活,避免了單繼承的侷限性:Thread方法不能繼承其他類。實現Runnable介面後,還可以繼續繼承其他類

           2)增強了程式的擴充套件性,降低了程式的耦合性:實現了設定執行緒任務和開啟執行緒進行了分離(解耦),實現類中,重寫了run方法

           3)如果要訪問當前執行緒,則必須使用Thread.currentThread()方法,而繼承方法只需要使用this方法即可訪問當前執行緒

 1 class RunnableImpl implements Runnable {
2 3 @Override 4 public void run() { 5 for (int i = 0; i < 20; i++){ 6 System.out.println(Thread.currentThread().getName()+"-->"+i); 7 } 8 } 9 } 10 11 public class Test04 { 12 public static void main(String[] args) { 13 RunnableImpl run = new RunnableImpl(); 14 Thread t = new Thread(run); 15 t.start(); 16 17 for (int i = 0;i < 20;i++){ 18 System.out.println(Thread.currentThread().getName() + "-->"+i); 19 } 20 } 21 }

3.匿名內部類實現建立Thread

 1 public class InnerClassThread {
 2     public static void main(String[] args) {
 3         
 4         // InnerClass implement 
 5         new Thread(){
 6             @Override
 7             public void run(){
 8                 for (int i=0; i < 20;i++){
 9                     System.out.println(Thread.currentThread().getName()+"-->"+"Ben");
10                 }
11             }
12         }.start();
13 
14         Runnable r = new Runnable() { // Polymorphism
15             @Override
16             public void run() {
17                 for (int i = 0;i<20;i++){
18                     System.out.println(Thread.currentThread().getName()+"-->"+"Allen");
19                 }
20             }
21         };
22         new Thread(r).start();
23 
24         // InnerClass implement use interface Runnable
25         new Thread(new Runnable() {
26             @Override
27             public void run() {
28                 for(int i = 0;i < 20;i++){
29                     System.out.println(Thread.currentThread().getName() + "-->"+"Amy");
30                 }
31             }
32         }).start();
33     }
34 }