2022年2月22日 星期二

Android Studio - Runnable(執行接口)基本(四十八)

Android Studio - Runnable(執行接口)基本(四十八):

Runnable(執行接口) 就是像個專案管理裡的工作包,也是一個接口,不是一個線程,由於 Java 並不提供多重繼承,如果類別需要繼承其他類別,就沒有辦法再繼承 Thread 類別來建立子線程。對於這種狀況,Java 提供有 Ruunable 接口介面,可以讓任何類別都可以用來建立子線程。

Android Studio Runnable 結構

Runnable 和 Callable 和 FutureTask 都可以在線程中執行任務,但也有不同點如下:
  • Runnable 是無返回值的任務,可以在線程中使用
  • Callable 是有返回值的任務,不可以在線程中使用
  • FutureTask 是有返回值,而且更易於管理和控制的任務,不可以在線程中使用

Thread + Runnable:

class TimerThread implements Runnable { // 新的執行緒

  public void run() { // 新執行緒要執行的內容

    while(true) { // 不斷顯示日期時間的迴圈執行

      for(int i = 0;i < 5000000;i++); // 等待一段時間

      Date now = new Date(); // 取得目前時間

      System.out.println("新執行緒:" + now); // 顯示時間

    }

  }

}

 

public class TestRunnable {

  public static void main(String[] argv) {

    // Runnable介面建立執行緒

    Thread newThread = new Thread(new TimerThread());

    newThread.start(); // 啟動新執行緒

    while(true) { // 不斷顯示日期時間的迴圈

      for(int i = 0;i< 5000000;i++); // 等待一段時間

      Date now = new Date(); // 取得目前時間

      System.out.println("舊執行緒:" + now); // 顯示時間

    }

  }

}


任何程式設計語言中的任何方法都在與調用者相同的線程中執行.當你調用 Thread.start() 時,它會在調用它的同一個線程中運行。

Thread 的 run() 方法不會在與 start 相同的線程中執行,但那是因為 start 本身並不會調用 run,start 只創建一個帶有一些資料結構的新線程(Runnable) ,新創建的線程查看該資料結構,識別 Runnable 並執行其運行方法。

Runnable 介面要求的類使用 run() 方法:

//通過實現Runnable介面創建執行緒

public class MyRunnable implements Runnable {

                int count=0;

                //實現run() 方法

                public void run() {

                                while(count<100){

                                                count++;

                                                System.out.println("count的值是:"+count);

                                }

                }

}


2022年 2月 22日(Tue)天氣報告
氣溫:31.0°F / -1.0°C @ 07:00
風速:每小時 13公里
降雨機會:7%
相對濕度:百分之 64%
天氣:多雲

沒有留言:

張貼留言