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
查看全部
avatar-img
發表第一個留言支持創作者!
Error分為三種 Compile time error Runtime error 俗稱(Exception) Logical error
普通的interface:有一個以上的abstract method Functinal Interface...
所有被宣告在interface中的method都是public abstract 所以interface中的method才不需要特地標上修飾符與abstract interface只體現設計方向 而如何實現此設計
abstract method 一定要在 abstract class裡面 abstract class裡面不一定要有abstract method
public: 可以在任何地方存取(access) private: 只能在同class中存取 default: 只能在同package中存取 protected: 只能在同package,以及它的子class存取。不能在不同package的非子class存取
Java不能同時多重繼承 但是可以多層繼承
Error分為三種 Compile time error Runtime error 俗稱(Exception) Logical error
普通的interface:有一個以上的abstract method Functinal Interface...
所有被宣告在interface中的method都是public abstract 所以interface中的method才不需要特地標上修飾符與abstract interface只體現設計方向 而如何實現此設計
abstract method 一定要在 abstract class裡面 abstract class裡面不一定要有abstract method
public: 可以在任何地方存取(access) private: 只能在同class中存取 default: 只能在同package中存取 protected: 只能在同package,以及它的子class存取。不能在不同package的非子class存取
Java不能同時多重繼承 但是可以多層繼承
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
注意到Threads提供用戶是由哪篇串文來追蹤自己帳戶的,以下幾個指標可以一起來試算看看,分析一下自身和他人帳號和串文的特質。 轉追蹤/按讚數 比例 按讚數/觀看數 比例 留言觀看/ 主串文觀看 比例
Thumbnail
你想用 Threads 經營社群嗎?經營 Threads 之前,你也會擔心 Threads 像其他社群媒體一樣,起初粉絲的觸及率很好,之後就變得不好嗎?以下的 3 個心法期望能夠協助到你,其他的新興社群平臺也適用喔!
Thumbnail
Meta 於 2023 年推出的全新社群媒體 Threads,專注於純文字內容分享,迅速在全球範圍內吸引了大量用戶。截至目前,Threads 每月活躍用戶數已突破 1.75 億人,其中印度、日本和台灣是活躍度最高的三個市場。
Thumbnail
好奇做了個 #測試, 如果當日不發文,把上個月互動率很高的貼文「自己轉發自己」 能不能讓貼文,重新獲得曝光? 實驗結果是可以的,轉發後一天,曝光從 725 => 818, 增加了 12%,留言、追蹤 也都有持續增加, 雖然效果沒有特別好,可能我們帳號還很新, 但如
Thumbnail
真正的工匠不指責工具:科技也是工具 經過超過兩十年的社交媒體演進,從上古神獸我也沒用過的 Myspace到Spill,到我這世代的臉書IG等等,對於這個新工具我們仍然無法確定這一努力是正面還是負面。這種模糊空間也包括Twitter,這個文字為主的應用程式同時也是社會的集體意識呈現,也因
Thumbnail
Threads 推出後怎麼走?使用者都在看什麼、發什麼?根據這幾天的產品使用心得,先快速紀錄我觀察到的產品定位、使用者行為、和未來的產品潛在開發方向。
Thumbnail
你不知道你的所有社群裡,只要你追蹤的人數不夠多,或是他們都習慣不發文,你看到的「就是這樣,是大數據塞給你的資訊」;即使你追蹤的夠多,訊息量夠大了,這些大數據還是會演算那些「為你推薦」而你不感到陌生的訊息給你,讓你「誤以為」那些都是你自己手動加的!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
注意到Threads提供用戶是由哪篇串文來追蹤自己帳戶的,以下幾個指標可以一起來試算看看,分析一下自身和他人帳號和串文的特質。 轉追蹤/按讚數 比例 按讚數/觀看數 比例 留言觀看/ 主串文觀看 比例
Thumbnail
你想用 Threads 經營社群嗎?經營 Threads 之前,你也會擔心 Threads 像其他社群媒體一樣,起初粉絲的觸及率很好,之後就變得不好嗎?以下的 3 個心法期望能夠協助到你,其他的新興社群平臺也適用喔!
Thumbnail
Meta 於 2023 年推出的全新社群媒體 Threads,專注於純文字內容分享,迅速在全球範圍內吸引了大量用戶。截至目前,Threads 每月活躍用戶數已突破 1.75 億人,其中印度、日本和台灣是活躍度最高的三個市場。
Thumbnail
好奇做了個 #測試, 如果當日不發文,把上個月互動率很高的貼文「自己轉發自己」 能不能讓貼文,重新獲得曝光? 實驗結果是可以的,轉發後一天,曝光從 725 => 818, 增加了 12%,留言、追蹤 也都有持續增加, 雖然效果沒有特別好,可能我們帳號還很新, 但如
Thumbnail
真正的工匠不指責工具:科技也是工具 經過超過兩十年的社交媒體演進,從上古神獸我也沒用過的 Myspace到Spill,到我這世代的臉書IG等等,對於這個新工具我們仍然無法確定這一努力是正面還是負面。這種模糊空間也包括Twitter,這個文字為主的應用程式同時也是社會的集體意識呈現,也因
Thumbnail
Threads 推出後怎麼走?使用者都在看什麼、發什麼?根據這幾天的產品使用心得,先快速紀錄我觀察到的產品定位、使用者行為、和未來的產品潛在開發方向。
Thumbnail
你不知道你的所有社群裡,只要你追蹤的人數不夠多,或是他們都習慣不發文,你看到的「就是這樣,是大數據塞給你的資訊」;即使你追蹤的夠多,訊息量夠大了,這些大數據還是會演算那些「為你推薦」而你不感到陌生的訊息給你,讓你「誤以為」那些都是你自己手動加的!