Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤與異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 與框架

Java 類參考

Java 有用資源

Java - 建立執行緒



在 Java 中建立執行緒有兩種不同的方法。我們已將它們列出如下:

  • 透過實現 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();

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

在此示例中,我們透過實現 Runnable 介面來建立一個名為 RunnableDemo 的類。RunnableDemo 類具有 run() 方法的實現。在主類 TestThread 中,我們建立了 RunnableDemo 物件,並使用這些物件建立了兩個 Thread 物件。當在每個執行緒物件上呼叫 Thread.start() 方法時,執行緒開始處理,程式執行。

package com.tutorialspoint;
class RunnableDemo implements Runnable {
   private String threadName;
   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Thread: " + threadName + ", " + "State: New");
   }

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

public class TestThread {
   public static void main(String args[]) {
	  RunnableDemo runnableDemo1 = new RunnableDemo( "Thread-1");
	  RunnableDemo runnableDemo2 = new RunnableDemo( "Thread-2");
	  
	  Thread thread1 = new Thread(runnableDemo1);
	  Thread thread2 = new Thread(runnableDemo2);
	
	  thread1.start();
	  thread2.start();
   }
}

輸出

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

透過擴充套件 Thread 類建立執行緒

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

步驟 1

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

public void run( )

步驟 2

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

void start( );

透過擴充套件 Thread 類建立執行緒的示例

以下是重寫為擴充套件 Thread 的前一個程式:在此示例中,我們建立了一個 ThreadDemo 類,該類擴充套件了 Thread 類。我們在建構函式()方法中呼叫 super(name) 為執行緒分配名稱,並呼叫 super.start() 啟動執行緒處理。

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      System.out.println("Thread: " + name + ", " + "State: New");
   }
   public void run() {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i); 
      }
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }

   public void start () {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}
public class TestThread {
   public static void main(String args[]) {
	  ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	  ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	  thread1.start();
	  thread2.start();
   }
}

輸出

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-2, State: Running
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

示例:演示 sleep() 方法

在此示例中,我們展示了sleep()方法的使用來延遲處理。它有助於在輸出中顯示並行處理。我們在 run 方法中添加了 Thread.sleep() 呼叫。InterruptedException 被處理,因為執行緒在休眠模式下可能會被中斷。

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      System.out.println("Thread: " + name + ", " + "State: New");
   }
   public void run() {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i); 
         try {
			Thread.sleep(50);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
      }
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   public void start () {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

public class TestThread {
   public static void main(String args[]) {
	   ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	   ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	   thread1.start();
	   thread2.start();
   }
}

輸出

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Dead
廣告