Android開發 - Runnable 類任務介面定義與後臺任務待辦解析

阿俊学JAVA發表於2024-08-28

什麼是 Runnable

  • Runnable 介面是用來定義一個任務的介面,這個任務可以在執行緒中執行。通俗地說,它就像一個“待辦事項”,用來描述需要在一個單獨的執行緒中完成工作Runnable 介面非常簡單,只定義了一個方法:run()。當一個實現了 Runnable 介面時,它需要提供這個方法的實現,裡面寫上你想要在新執行緒中執行的程式碼

    public interface Runnable {
        void run();
    }
    

使用 Runnable 的場景

  • 開發一個應用程式時,需要在後臺執行一些任務,比如處理檔案下載資料或者執行耗時的計算不希望這些任務阻塞主執行緒(特別是在圖形使用者介面應用中,阻塞主執行緒會導致介面卡頓)時。就可以使用 Runnable建立一個新的任務,並把它交給一個執行緒去處理

Runnable 介面的使用

  1. 實現 Runnable 介面建立一個類來實現 Runnable 介面,並重寫 run() 方法。在這個方法裡,編寫想要執行的程式碼

    public class MyRunnable implements Runnable {
        @Override
        public void run() {
            // 這裡是你希望線上程中執行的程式碼
            for (int i = 0; i < 5; i++) {
                System.out.println("Hello from a thread! " + i);
                try {
                    Thread.sleep(1000); // 讓執行緒休眠1秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  2. 建立執行緒並傳入 Runnable 例項建立一個 Thread 物件,並傳入建立的 Runnable 例項。然後呼叫 start() 方法啟動執行緒

    public class Main {
        public static void main(String[] args) {
            MyRunnable myRunnable = new MyRunnable(); // 建立Runnable例項
            Thread thread = new Thread(myRunnable);  // 建立一個執行緒並傳入Runnable例項
            thread.start();  // 啟動執行緒
    
            // 主執行緒可以繼續做其他事情
            for (int i = 0; i < 5; i++) {
                System.out.println("Hello from the main thread! " + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  • 執行這個程式時,你會看到兩個“Hello”訊息交替輸出,一個來自主執行緒,一個來自新的執行緒

Runnable 和 Thread 的區別解析

  • Runnable 是一個介面:它只包含一個 run() 方法,用來定義需要在執行緒中執行任務邏輯

  • Thread 是一個類:它本身是一個執行緒,它可以直接呼叫 start() 方法啟動執行緒

  • 關注點區別RunnableThread 的設計體現了物件導向程式設計中的關注點分離原則Runnable 關注的是“要做什麼事情”,而 Thread 關注的是“如何去做這件事情”

Runnable 介面的好處

  • 靈活性:透過實現 Runnable 介面,一個類可以繼續繼承其他類,因為 Java單繼承的。但如果直接繼承 Thread 類,那麼這個類就不能繼承其他類

  • 任務與執行緒的分離:使用 Runnable 可以將任務的定義與執行分開,讓一個任務可以在多個執行緒中執行,或者在某些情況下可以複用

  • 更好的物件導向設計:使用 Runnable 介面更好地實現物件的解耦,讓任務的執行方式更加靈活可控

總結

  • Runnable 介面是實現多執行緒的一種簡單而靈活的方式。透過實現 Runnable 介面並將其傳遞Thread 物件,我們可以很容易地在程式中建立和管理多個執行緒,確保每個任務都能在後臺高效地執行不阻塞主執行緒的執行

相關文章