Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤與異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API與框架

Java 類引用

Java 有用資源

Java - 啟動執行緒



啟動執行緒

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

void start();

啟動執行緒的語法

以下是啟動執行緒的語法:

thread_obj.start();

這裡,thread_objThread的物件,start()Thread 類的方法。

透過實現 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 類:在這個例子中,我們建立了一個 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: 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

啟動執行緒(演示 sleep() 方法)

在這個例子中,我們建立了兩個擴充套件 Thread 類的 ThreadDemo 物件。我們在建構函式中呼叫 super(name) 為執行緒賦值名稱,並呼叫 super.start() 開始執行緒處理。使用sleep() 方法,我們在處理中引入延遲。

示例

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
廣告