Java中實現Runnable介面與繼承Thread類


我們可以透過實現Runnable介面或繼承Thread類來建立執行緒。以下是使用這兩種方法建立執行緒的詳細步驟。

透過實現Runnable介面建立執行緒

如果您的類旨在作為執行緒執行,則可以透過實現**Runnable**介面來實現此目的。您需要遵循三個基本步驟:

步驟1

第一步,您需要實現**Runnable**介面提供的run()方法。此方法為執行緒提供了一個入口點,您將在該方法中放入完整的業務邏輯。以下是run()方法的簡單語法:

public void run( )

步驟2

第二步,您將使用以下建構函式例項化一個**Thread**物件:

Thread(Runnable threadObj, String threadName);

其中,threadObj是實現**Runnable**介面的類的例項,**threadName**是賦予新執行緒的名稱。

步驟3

建立Thread物件後,您可以透過呼叫**start()**方法啟動它,該方法會執行對run()方法的呼叫。以下是start()方法的簡單語法:

void start();

示例

線上演示

這是一個建立新執行緒並開始執行它的示例:

class RunnableDemo implements Runnable {
   private Thread t;
   private String threadName;

   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Creating " + threadName );
   }

   public void run() {
      System.out.println("Running " + threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);

            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
      } catch (InterruptedException e) {
         System.out.println("Thread " + threadName + " interrupted.");
      }
      System.out.println("Thread " + threadName + " exiting.");
   }

   public void start () {
      System.out.println("Starting " + threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}

public class TestThread {
   public static void main(String args[]) {
      RunnableDemo R1 = new RunnableDemo( "Thread-1");
      R1.start();

      RunnableDemo R2 = new RunnableDemo( "Thread-2");
      R2.start();
   }
}

這將產生以下結果:

輸出

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

透過繼承Thread類建立執行緒

建立執行緒的第二種方法是建立一個擴充套件**Thread**類的新類,使用以下兩個簡單的步驟。這種方法在處理使用Thread類中可用方法建立的多個執行緒時提供了更大的靈活性。

步驟1

您需要重寫Thread類中可用的**run( )**方法。此方法為執行緒提供了一個入口點,您將在該方法中放入完整的業務邏輯。以下是run()方法的簡單語法:

public void run( )

步驟2

建立Thread物件後,您可以透過呼叫**start()**方法啟動它,該方法會執行對run()方法的呼叫。以下是start()方法的簡單語法:

void start( );

示例

以下是重寫為擴充套件Thread類的前面程式:

線上演示

class ThreadDemo extends Thread {
   private Thread t;
   private String threadName;

   ThreadDemo( String name) {
      threadName = name;
      System.out.println("Creating " + threadName );
   }

   public void run() {
      System.out.println("Running " + threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
      } catch (InterruptedException e) {
         System.out.println("Thread " + threadName + " interrupted.");
      }
      System.out.println("Thread " + threadName + " exiting.");
   }

   public void start () {
      System.out.println("Starting " + threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}

public class TestThread {

   public static void main(String args[]) {
      ThreadDemo T1 = new ThreadDemo( "Thread-1");
      T1.start();

      ThreadDemo T2 = new ThreadDemo( "Thread-2");
      T2.start();
   }
}

這將產生以下結果:

輸出

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

更新於:2020年6月23日

1K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告