Thread

閱讀時間約 4 分鐘

程式建立thread,然後會交給硬體中的scheduler去排定執行、切換資源

我們無法強制指定順序,因為電腦有太多任務需要執行,但資源有限,因此會由scheduler去分配、切換資源

電腦能同時執行多項任務,我現在在打字、播youtube聽音樂、跟朋友傳line訊息、下載圖片

雖然程式中可以設定thread的priority,但也只能起到"建議"scheduler的作用,告訴scheduler這一個thread的優先級比較高或比較低,因為還要處理很多跟你程式沒直接關係的任務,因此沒辦法保證一定會依照你設的priority順序執行


Race Condition

如何避免多執行緒同時對一個method或參數做操作? 加上synchronized

class Calculator{
int count;
public synchronized void increment(){
count++;
}
}

因此每次只能有一個thread能使用increment這個method,其他的thread都必須等待


完整程式範例

class Calculator{
int count;
public synchronized void increment(){
count++;
}
}

public class Demo {
public static void main(String[] args) {

Calculator calculator = new Calculator();

Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
calculator.increment();
}
});

Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
calculator.increment();
}
});

t1.start();
t2.start();

try {
t1.join();
t2.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}

System.out.println(calculator.count);

}
}

建立兩個thread,t1和t2,分別對Calculator的increment method執行10,000次(數字越大越明顯)

如果第3行沒有synchronized 的話,結果(第35行)就不會輸出預期的20,000

因為中途難免會出現兩個thread同時執行increment的情形

所以需要synchronized


29、30行,join method 的目的是要等thread的內容執行完

才能讓35行印出結果,不然會程式才不會等t1和t2執行完,馬上就會印出結果 0


Thread States 執行緒的狀態

raw-image
  • new: 創建thread
  • runnable: 交給scheduler,待它排定執行(說是排定但其實幾乎都是瞬間的事情)
  • running: 執行
  • waiting: 等待執行完所有該thread該做的事情。做完之後會通知scheduler說可以換別人了
  • dead: 被程式強制終止。常見於終止整個應用程式時


我的Java學習日記
留言0
查看全部
發表第一個留言支持創作者!
Java 不支持multi-inheritance
閱讀時間約 2 分鐘
存取修飾符 Access Modifiers
閱讀時間約 1 分鐘
abstract 關鍵字
閱讀時間約 2 分鐘
interface 關鍵字
閱讀時間約 3 分鐘
Interface的種類
閱讀時間約 2 分鐘
Exception
閱讀時間約 1 分鐘
你可能也想看
Threads和Twitter:展開無限精彩對話的新時代 Threads和Twitter:展開無限精彩對話的新時代
Thumbnail
avatar
CH
2023-07-19
Threads尚未準備好:我們正在參與大型網路社會實驗 真正的工匠不指責工具:科技也是工具 經過超過兩十年的社交媒體演進,從上古神獸我也沒用過的 Myspace到Spill,到我這世代的臉書IG等等,對於這個新工具我們仍然無法確定這一努力是正面還是負面。這種模糊空間也包括Twitter,這個文字為主的應用程式同時也是社會的集體意識呈現,也因
Thumbnail
avatar
Kevin_malamute |凱文-馬拉穆
2023-07-11
Threads 的定位研究和產品觀察|EP28Threads 推出後怎麼走?使用者都在看什麼、發什麼?根據這幾天的產品使用心得,先快速紀錄我觀察到的產品定位、使用者行為、和未來的產品潛在開發方向。
Thumbnail
avatar
張家惟 Evan Chang
2023-07-08
Threads是新東西嗎?老狗變不出新把戲!你不知道你的所有社群裡,只要你追蹤的人數不夠多,或是他們都習慣不發文,你看到的「就是這樣,是大數據塞給你的資訊」;即使你追蹤的夠多,訊息量夠大了,這些大數據還是會演算那些「為你推薦」而你不感到陌生的訊息給你,讓你「誤以為」那些都是你自己手動加的!
Thumbnail
avatar
換日線
2023-07-08
Threads怎麼玩,4個步驟讓你馬上學會!Threads:Meta推出的新社群平台,有望取代推特? Meta旗下Instagram於7月6日推出了一款名為「Threads」的全新應用程式,允許現有的Instagram用戶憑藉原本的帳號登入。Threads可以發佈最多500字的「串文」、連結、照片與長度上限5分鐘的影音內容。推出16小時後,M
Thumbnail
avatar
股市鴿|存股|現金流|時事
2023-07-07
Threads 評測:為什麼這與推特競爭的社交平台備受矚目? 先證明我已經真的有使用了Threads,而且我連他會不會 Ban其他對手有關的貼文都實驗了,如果被刪文再跟大家分享 相較於國外,台灣人使用推特的量真的是相對於其他軟體低很多。但是對國外來說,隨著屬於馬斯克推特的爭議不斷升溫,Meta趁你病要你命,全新社群平台Threads於今日台灣時間7月6號正式
Thumbnail
avatar
Kevin_malamute |凱文-馬拉穆
2023-07-06
Threads 會衝擊到 Twitter 的市場嗎?就在馬斯克宣布要採取 Twitter 瀏覽篇數的限制政策之後不久,因應競爭對手政策而上線的 Threads 是否真的能夠衝擊 Twitter 市場,甚至直接取代掉 Twitter?我個人覺得可能需要長期觀望。
Thumbnail
avatar
阿肯
2023-07-06