方法說明:
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 隱藏醜陋複雜的硬體介面,提供良好的抽象介面...