1. 程式人生 > >guarded block(保護塊)

guarded block(保護塊)

假設a和b執行緒共同操作一個變數,一個執行緒無限迴圈判斷這個變數的狀態,當這個變數狀態不符合條件時跳出迴圈,這樣這個執行緒是持續佔用資源的,那麼將將程式改為迴圈體是一個繼承自Object的wait方法,這樣該執行緒就不會佔用資源,且wait方法會放棄物件鎖,為了保證變數的記憶體一致性,將方法改為同步,方法判斷時別的執行緒不會操作該變數,wait()時,交出物件鎖,別的執行緒操作該變數,等待別的執行緒喚醒該執行緒;

生產者消費者經典案例(producer-consumer),生產者和消費者共享一個物件,生產者放東西時,要保證消費者已經把東西消費了;消費者消費時,要保證生產者已經把東西生產了。