併發程式設計3 執行緒排程

2021-06-28 08:08:37 字數 1660 閱讀 6157

方法說明:

run 執行緒執行的主體

yield() 放棄當前的時間片進入可執行狀態,可以被再次選中

start() 執行緒進入可執行階段

sleep(), 阻塞一定的時間,會持有鎖

t2.join() 等待t2執行緒執行結束,會持有鎖,有可能會死鎖

wait()   鎖物件的方法,持有鎖物件的執行緒釋放鎖,進入阻塞佇列等待notify

notify() 鎖物件的方法,喚醒乙個該鎖物件阻塞佇列中的執行緒

notifyall()  鎖物件的方法,喚醒所有該鎖物件阻塞佇列中的執行緒

class synclass

}

final synclass sc = new synclass();

thread ts = new thread[10];

for (int i = 0; i < 10; i++) catch (interruptedexception e) }};

};}

for (thread t : ts)

timeunit.seconds.sleep(1);

synchronized (sc)

while(true);

會列印:

thread1

thread0

如果把其中的sc.notify()換為notifyall()則會列印出所有的執行緒。

在阻塞的方法比如wait() 或者sleep()中會有while(interruped()) throws interruptedexception()方法,

interrupt()方法會設定狀態為打斷狀態

interrupted()方法如果是打斷狀態返回true,同時設定打斷狀態為false;

public class storage 

products[++index] = product;

system.out.println("生產了" + product);

this.notify(); }

public synchronized string consume() throws interruptedexception

this.notify();

return products[index--]; }

public static void main(string args) catch (interruptedexception e)

try catch (interruptedexception e) }};

}.start();

new thread() catch (interruptedexception e)

try catch (interruptedexception e) }};

}.start();

while(true);

}}

乙個執行緒生產,乙個執行緒消費。

生產超出上限則wait消費,沒超出則進行生產,開始生產了就應該通知消費者可以消費了。

消費執行緒沒有商品則wait生產,有商品就消費,同時通知生產者可以繼續生產了。

併發程式設計3 執行緒排程

方法說明 run 執行緒執行的主體 yield 放棄當前的時間片進入可執行狀態,可以被再次選中 start 執行緒進入可執行階段 sleep 阻塞一定的時間,會持有鎖 t2.join 等待t2執行緒執行結束,會持有鎖,有可能會死鎖 wait 鎖物件的方法,持有鎖物件的執行緒釋放鎖,進入阻塞佇列等待n...

併發程式設計 3 執行緒間共享資料

一 共享記憶體帶來的問題 讀時沒問題,寫時會有競爭問題。二 解決方法 1 最簡單的辦法就是對資料結構採用某種保護機制,確保只有進行修改的執行緒才能看到不變數被破壞時的中間狀態。從其他訪問執行緒的角度來看,修改不是已經完成了,就是還沒開始。2 另乙個選擇是對資料結構和不變數的設計進行修改,修改完的結構...

3 併發程式設計

程序 程序指的就是程式執行的過程,是乙個動態的概念 程式 程式就是一系列的 檔案,是乙個靜態的概念 程序也可以說成是作業系統幹活的過程,就是作業系統控制硬體來執行應用程式的過程 程序是作業系統最核心的概念,研究進行就是在研究作業系統 一 作業系統的作用 1 隱藏醜陋複雜的硬體介面,提供良好的抽象介面...