建立執行緒


建立一個執行緒有兩種方法:

  • 通過擴充套件Thread類。
  • 通過實現Runnable介面。

Thread類
Thread類提供了線上程上建立和執行操作的建構函式和方法。Thread類擴充套件了Object類並實現了Runnable介面。

常用的Thread類建構函式

  • Thread()
  • Thread(String name)
  • Thread(Runnable r)
  • Thread(Runnable r,String name)

Thread類的常用方法:

  • public void run(): 用於執行執行緒的操作。
  • public void start(): 開始執行執行緒,JVM呼叫執行緒上的run()方法。
  • public void sleep(long miliseconds): 使當前正在執行的執行緒休眠(暫時停止執行)達指定的毫秒數。
  • public void join(): 等待執行緒死亡。
  • public void join(long miliseconds): 按指定的毫秒數等待執行緒死亡。
  • public int getPriority(): 返回執行緒的優先順序。
  • public int setPriority(int priority): 更改執行緒的優先順序。
  • public String getName(): 返回執行緒的名稱。
  • public void setName(String name): 更改執行緒的名稱。
  • public int getId():返回執行緒的編號(ID)。
  • public Thread.State getState(): 返回執行緒的狀態。
  • public boolean isAlive(): 測試執行緒是否處於活動狀態。
  • public void yield(): 使當前正在執行的執行緒物件暫時暫停並允許其他執行緒執行。
  • public void suspend(): 用於掛起執行緒(depricated)。
  • public void resume(): 用於恢復掛起的執行緒(depricated)。
  • public void stop(): 用於停止執行緒(depricated)。
  • public boolean isDaemon(): 測試該執行緒是否為守護行程執行緒。
  • public void setDaemon(boolean b): 將執行緒標記為守護行程或使用者執行緒。
  • public void interrupt(): 中斷執行緒。
  • public boolean isInterrupted(): 測試執行緒是否被中斷。
  • public static boolean interrupted(): 測試當前執行緒是否已被中斷。

Runnable介面:
Runnable介面應由任何其範例由執行緒執行類實現。Runnable介面只有一個run()方法。

  • public void run(): 用於執行執行緒的操作。

啟動執行緒:

Thread類的start()方法用於啟動新建立的執行緒。它執行以下任務:

  • 一個新執行緒啟動(使用新的callstack)。
  • 執行緒從New狀態移動到Runnable狀態。
  • 當執行緒有機會執行時,它的目標run()方法將執行。

範例

1. 通過擴充套件Thread類執行緒範例

package com.yiibai;

class Multi extends Thread {
    public void run() {
        System.out.println("thread is running...");
    }

    public static void main(String args[]) {
        Multi t1 = new Multi();
        t1.start();
    }
}

執行上面範例程式碼,得到以下結果:

thread is running...

2. 通過實現Runnable介面的執行緒範例

package com.yiibai;

class Multi implements Runnable {
    public void run() {
        System.out.println("thread is running...");
    }

    public static void main(String args[]) {
        Multi m1 = new Multi();
        Thread t1 = new Thread(m1);
        t1.start();
    }
}

執行上面範例程式碼,得到以下結果:

thread is running...

如果沒有擴充套件Thread類,類物件就不會被視為一個執行緒物件。所以需要明確地建立Thread類物件。傳遞實現Runnable類的物件,以便類的run()方法可以執行。