1. 程式人生 > >java併發程式設計之執行緒的基本概念

java併發程式設計之執行緒的基本概念

本文為學習筆記。源自學習微信公眾號“我們都是小青蛙”。

本篇文章將記錄如何使用java中的執行緒。

main執行緒

main方法是程式入口,我們對已經編譯好的class檔案呼叫java命令時就可以執行一個java程式。這個過程中,其實系統自動為我們建立了一個程序和一個執行緒,而且這個執行緒的名字就叫做main。main執行緒是用來執行我們的程式的,不過系統還會為我們建立一些輔助執行緒來幫助main執行緒的執行。

在java中,使用執行緒可以被理解為任務。我們需要做的事情,就是

  • 定義任務
  • 使用任務

定義任務

java中的任務被抽象成了一個Runnable介面:

public interface Runnable {
    public void run();
}

我們的自定義任務需要去實現這個介面,並把任務的詳細內容寫在覆蓋的run方法裡,比如我們定義一個輸出一個字串的任務:

public class PrintTask implements Runnable {

    @Override
    public void run() {
        System.out.println("輸出一行字");
    }
}

執行任務

java中的Thread類來代表一個執行緒,我們需要關注它的這幾種構造方法:
在建立執行緒物件的時候傳入需要執行的任務以及這個執行緒的名稱。

   Thread(Runnable target)

只傳入需要執行的任務,名稱是系統自動生成的,或者可以在建立物件後再通過別的方法修改名稱。

     Thread(String name)

只傳入待建立執行緒的名稱。

      Thread()

啥都不傳,就是單純構造一個執行緒物件而已~

下面我們來執行上面的任務。

public class Test {
    public static void main(String[] args) {
        new Thread(new PrintTask()).start();
    }
}

//輸出: 輸出一行字

Thread類本身就代表了一個Runnable任務,我們看Thread類的定義。

public class Thread implements Runnable {

    private Runnable target;

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

    // ... 為省略篇幅,省略其他方法和欄位
}

所以,啟動任務我們也可以這樣寫。

public class PrintThread extends Thread {

    @Override
    public void run() {
        System.out.println("輸出一行字");
    }
}

 class Test {

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

執行緒的一些方法

獲取執行緒ID:

 long getId()

獲取和設定執行緒名稱

       void setName(String name)
       String getName()

獲取和設定執行緒優先順序

      void setPriority(int newPriority)
      int getPriority()

休眠

  static void sleep(long millis) throws InterruptedException