這裡設定了乙個boolean的值,預設值是false
這裡面有二個執行緒,二個執行緒同時進入到tv(想象為容器)這個容器中 ,去拿資料!
注意這裡有乙個boolean型別的燈!! 執行緒進去尋找方法! 當boolean !=true的時候,生產表演了+voice!
當boolean==false的時候!就進去了!!然後睡眠 super.wait()等待; super.notify()喚醒對方!
如果滿足條件!例如第乙個play方法滿足! boolean 預設值 flag=false的; 如果滿足if判斷!就要進去!進去遇到 super.wait()就開始等待!讓對方表演!當末尾的flag=true的時候! 又走到 watch方法的if判斷! watch方法裡,if判斷(flagfalse) 而flagtrue; 所以執行下面的資料!產生**了+this.voice 以此類推.
上原始碼:
public
class
testthread
}/**
* 表演類
* @author 戴爾
* */
class
play
extends
thread
@override
public
void
run(
)else}}
}/**
* **類
* @author 戴爾
* */
class
watch
extends
thread
@override
public
void
run()}
}class
tvcatch
(interruptedexception e)
}this
.voice=voice;
system.out.
println
("表演了,"
+voice)
;super
.notify()
; flag=
true;}
/** * **方法
*/public
synchronized
void
watch()
catch
(interruptedexception e)
} system.out.
println
("**了!"
+this
.voice)
;super
.notify()
; flag=
false;}
}
部分執行結果!!
表演了,看動漫
**了!看動漫
表演了,末日崩塌
**了!末日崩塌
執行緒通訊之訊號燈法
訊號燈法是通過乙個標誌位來解決執行緒之間通訊的問題,這裡我們運用演員表演完成觀眾才可以 的邏輯 實現思路 定義三個類 演員 觀眾 互動平台 演員負責表演節目,觀眾負責 節目 互動平台我們用tv這個類來代表,它決定演員何時表演,觀眾何時 package thread public class thre...
訊號燈與自旋鎖對比。
sem就是乙個睡眠鎖.如果有乙個任務試圖獲得乙個已被持有的訊號量時,訊號量會將其推入等待佇列,然後讓其睡眠。這時處理器獲得自由去執行其它 當持有訊號量的程序將訊號量釋放後,在等待佇列中的乙個任務將被喚醒,從而便可以獲得這個訊號量。訊號量一般在用程序上下文中.它是為了防止多程序同時訪問乙個共享資源 臨...
第10章 Posix訊號燈
三種訊號燈 說明 p v操作 互斥鎖 條件變數和訊號量之間的差別 include for o constants include for mode constants include sem t sem open const char name,int oflag sem t sem open co...