1. 程式人生 > >建立多執行緒的兩種方法

建立多執行緒的兩種方法

建立執行緒的方法:

  1. 一種方法是將類宣告為 Thread 的子類。該子類應重寫 Thread 類的 run 方法。接下來可以分配並啟動該子類的例項。
    public class MyThread extends Thread{
        @Override
        public void run() {
            super.run();                      //繼承Thread,並重寫run方法,run函式裡寫要執行的程式碼
            for (int i = 0; i < 100; i++) {
                System.out.println("aaaaaa");
            }
        }
    }
    
    
        //主執行緒
        public static void main(String[] args) {
            MyThread myThread=new MyThread();       //建立執行緒子類物件
            myThread.start();                       //啟動執行緒
            for (int i = 0; i < 100; i++) {         //這裡的i要足夠大
                System.out.println("主執行緒");
            }
        }
    1. 繼承Thread :  public class MyThread extends Thread
    2. 重寫run()方法
    3. 將要執行的程式碼放在run()方法中
    4. 建立Thread的子類物件: MyThread myThread=new MyThread();
    5. 開啟執行緒: myThread.start();下面是例項
  2. 另一種方法時宣告實現 Runnable 介面的類。該類然後實現 run 方法。然後可以分配該類的例項,在建立 Thread 時作為一個引數來傳遞並啟動。

    例項:
    class MyRunnable implements Runnable{           //1.定義一個類實現Runnable
    
        public static void main(String[] args) {
            MyRunnable myRunnable=new MyRunnable();     //4.建立Runnable的子類物件
            Thread thread=new Thread(myRunnable);       //5.將其當做引數傳遞給Thread的建構函式
            thread.start();                             //6.開啟執行緒
            for (int i = 0; i < 100; i++) {
                System.out.println("主執行緒");
            }
        }
    
        @Override
        public void run() {                         //2.重寫run方法,3.將要執行的程式碼寫在run方法中,
            for (int i = 0; i < 100; i++) {
                System.out.println("aaaaaa");
            }
        }
    }

     

  3. 兩種方法的區別:

    1. 繼承Thread類:由於子類重寫了Thread類的run方法,當呼叫start時,直接呼叫子類的run()方法。

    2. 實現Runnable:Thread建構函式中傳入了Runnable的引用,成員變數記住了它,start()呼叫run()方法時內部判斷Runnable的引用是否為空,不為空時:編譯看的是Runnable的run(),執行看的是子類的run()方法。

    3. 好處與弊端:

      底層都是由Thread的start()方法呼叫run實現的,所以Thread方法更直接,程式碼更簡單。

      但是Thread 方法是繼承之後才能實現的,而Java是單繼承,當類已經繼承了其他類就需要使用第二種方法了(Runnable),應為Java介面可以多繼承

  4. 內部匿名類實現兩種方法(常用):

             //內部匿名類時實現繼承Thread方法
            new Thread(){                   //1. new Thread(){}   繼承Thread類,
                public void run(){          //2. 重寫run方法
    
                }
            }.start();
            
            //內部匿名類時實現Runnable
            new Thread(new Runnable() {         //將Runnable的子類物件當做引數傳遞Thread的構造方法
                @Override
                public void run() {             //重寫run方法
    
                }
            }).start();