[Java/Android] Runnable

Boryuh
3 min readSep 5, 2020

--

本篇包含

  • 官方定義
  • 個人理解
  • 舉例
  • 應用
  • 原始碼

- 官方定義

首先看看官方怎麼說:

相信大家都有看到一個關鍵字,那就是「thread」,沒錯, runnable 通常都跟 thread 密不可分的,將 runnable 定義好之後,可以交給 thread 去執行 runnable 的內容。

- 個人理解

我個人把 runnable 理解為要做的「工作內容」或者購物時要買的「物品」。

runnable = 工作內容 or 購物物品

- 舉例

這邊舉個生活上的例子來說好了,假設下班回家後要「買便當、倒垃圾」,如下表。

1. 買便當

2. 倒垃圾

情境一

假設今天北漂的你,自己租屋,下班回家後要去買便當還要追垃圾車,是不是覺得很麻煩,要嘛我迅速買好便當然後回家打包垃圾去等垃圾車;要嘛我先丟垃圾,再去買便當回來吃。

如果沒有剛好,買完便當回到家垃圾車就這麼剛好開過去了,那內心豈不是很無言。

以程式來說,你把上面兩項工作都main thread上執行,一個完成後在去執行下一個。如果是在寫 Android 的話,官方都會要求把耗時的操作(如:連網取資料)開一個 thread 去執行,不要直接在 main thread 連網,因為這樣會拖到 main thread(UI) 的動作,資料還沒撈到 main thread 就卡著甚麼都不能做。

情境二

假設今天北漂的你,交了個男/女朋友(以下簡稱伴侶),你們兩個知道今天垃圾車有出來收垃圾,感情濃烈的你們進行了家事的分配,例如男生「倒垃圾」,女生則是「買便當」,那麼你們兩個人可以在同一時間分頭做事,一起分攤家事。

runnable_1 = 買便當

runnable_2 = 倒垃圾

以程式來說,你與伴侶各是一個 thread ,可以各自分頭去執行工作,不會互相打架,假設你是 thread_1 ,伴侶是 thread_2 ,那麼照上面例子來說:

thread_1工作內容為:runnable_2。

thread_2工作內容為:runnable_1。

相信大家對於 runnable 有基本的認識了,那麼我們接下來就上程式碼吧 !!!

- 應用

public static void main(String[] args) {
Thread you = new Thread(runnable_1);
you.start();

Thread yourMate = new Thread(runnable_2);
yourMate.start();

// 確認不同人
System.out.println(you.getName());
System.out.println(yourMate.getName());
}

private static Runnable runnable_1 = new Runnable() {
@Override
public void run() {
// 工作內容
System.out.println("買便當");
}
};

private static Runnable runnable_2 = new Runnable() {
@Override
public void run() {
// 工作內容
System.out.println("倒垃圾");
}
};

內容如果有錯誤的地方,請不吝指教,讓我們一起成長 ^^

--

--