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); } } } |
沒有留言:
張貼留言