定义线程的两种方式
創建和使用線程,就是要讓這個線程完成一些特定的功能。 Java 提供了 java.lang.Thread 類來完成多線程的編程,這個類也提供了大量的方法方便操作線程。在編寫一個線程類時,可以繼承自這個 Thread 類,完成線程的相關工作。
有時編寫的線程類除了繼承 Thread 以外還要繼承其他類,但 Java 又不支持多繼承,所以 Java 還提供了另外一種創建線程的方式,即實現 Runnable 接口。
因此,有兩種定義線程類的方式——繼承 Thread 類和實現 Runnable 接口。
如果線程類直接繼承 Thread 類,其代碼結構大致如下:
class 類名 extends Thread{//屬性//其他方法public void run() { // 重寫 `Thread` 類中的 run() 方法//線程需要執行的核心代碼} }從線程類的代碼結構可以看出,一個線程的核心代碼需要寫在 run() 方法里。也就是說,當線程從就緒狀態,通過調度程序分配 CPU 資源,進入運行狀態后,執行的代碼即 run() 方法里面的代碼。
如果線程類是實現 Runnable 接口的,其代碼結構大致如下:
class 類名 implements Runnable{//屬性//其他方法public void run() { // 實現Runnable接口中的 run() 方法//線程需要執行的核心代碼} }和繼承 Thread 類非常類似,實現 Runnable 接口的線程類也需要編寫 run() 方法,將線程的核心代碼置于該方法中。但是 Runnable 接口中僅僅定義了 run() 這么一個方法(Thread類中可以接收Runnable對象)因此還必須將 Runnable 對象轉換為 Thread 對象,從而使用 Thread 類中的線程 API ,轉換的方法如下所示。
Runnable 實現類名 對象名 = new Runnable實現類名(); Thread 線程對象名 = new Thread(對象名);總結