Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤與異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java APIs 與框架

Java 類引用

Java 有用資源

Java – 執行緒命名及示例



在實現 Runnable 介面時命名執行緒

如果您的類旨在作為執行緒執行並實現Runnable介面,則需要使用以下建構函式例項化Thread物件:

Thread(Runnable threadObj, String threadName);

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

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

void start();

示例

在這個例子中,我們透過實現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類中可用方法建立的多個執行緒時提供了更大的靈活性。為了命名執行緒,我們需要使用名稱呼叫超類Thread建構函式。

class ThreadDemo extends Thread {
   ThreadDemo( String name) {
      super(name);
      ...
   }
...
}

示例 1

以下是重寫為擴充套件Thread的前面程式:在這個例子中,我們建立了一個ThreadDemo類,它擴充套件了Thread類。我們在constructor()方法中呼叫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

示例 2

在這個例子中,我們建立了一個ThreadDemo類,它擴充套件了Thread類。我們沒有向Thread傳遞任何名稱,它將列印系統分配給執行緒的預設名稱。

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( ) {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "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();
	  ThreadDemo thread2 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
   }
}

輸出

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