有一台機器具有三個任務:乙個製作吐司,乙個給吐司抹黃油,另乙個在抹過黃油的吐司上塗果醬。
根據物件導向的封裝特徵:
把對同一事物進行操作的方法和相關的方法放在同乙個類中,把方法和它操作的資料放在
同乙個類中。
吐司機器有3個方法
製作吐司
給吐司抹黃油
在抹過黃油的吐司上塗果醬
為了實現3個任務相互協作,使用wait和notifyall技術
怎麼切換3個任務呢?我們知道多生產多消費主要切換的是生產和消費方法,它們使用2種狀態來標記,true和false;而現在我們需要3中狀態,
一種是製作吐司,一種是給吐司抹黃油,一種是在抹過黃油的吐司上塗果醬
怎麼切換呢?
第乙個步驟是製作吐司,那麼必須是先執行製作吐司。設定製作吐司標誌的預設值為false,其餘的2中狀態標誌為true(使vm第乙個切換到它們的時候處於等待狀態)。
由於第二個步驟是給吐司抹黃油,所以在第乙個步驟的時候,必須設定第二個步驟的標誌為false,這樣能使第二個步驟進行操作;至於給吐司抹黃油方法,跟製作吐司
的思想一致。
核心**:
object obj=new object();
//定義三種標誌
boolean maketoaflag;//製作吐司
boolean toatobuttflag=true;//給吐司抹黃油
boolean butttoajamflag=true;//在抹過黃油的吐司上塗果醬
//製作吐司
public void maketoa() catch (interruptedexception e)
}system.out.println("製作吐司");
toatobuttflag=false;
maketoaflag=true;
obj.notifyall();}}
//給吐司抹黃油
public void toatobutter() catch (interruptedexception e)
}system.out.println("給吐司抹黃油");
butttoajamflag=false;
toatobuttflag=true;
obj.notifyall();}}
//在抹過黃油的吐司上塗果醬
public void butttoajam() catch (interruptedexception e)
}system.out.println("在抹過黃油的吐司上塗果醬");
maketoaflag=false;
butttoajamflag=true;
obj.notifyall();}}
讓警察崩潰的司機
讓警察崩潰的司機 一名警察要一位超速行駛的男士把車停到路邊,之後開始了下面的問話調查 警察 我能看一下你的駕駛執照嗎?司機 我沒有駕照,因為第五次酒後開車,我的駕照被吊銷了。警察 我可以看看你車子的牌照嗎?司機 這不是我的車,是我偷人家的。警察 車是偷的?司機 對。但是讓我想一想。我想起來了,車主的...
怎樣讓蘭花多發芽
蘭花栽培品種的繁殖一般都是無性繁殖,依靠分株髮苗是蘭花唯一的繁殖方式。讓蘭花多發芽發壯芽是養蘭人的共同願望,也一直是眾蘭友孜孜以求的目標,近年來,蘭友們在前人積累經驗的基礎上不斷地實踐探索 開拓創新,同時引進外國的先進技術,取得了不少成功的經驗。本人暫且拋磚引玉,從以下幾方面同蘭友們進行 怎樣才能提...
怎樣讓自己更優秀
其實一直在想這個問題,斷斷續續,停停走走,也沒好好的總結下,一直要求自己,業餘時間一定要再學習學習,豐富豐富自己,肚子沒墨水,終究別人看不起,自己看不起,一無所得,所以要一直學習,讓自己變的更優秀,那麼,真的什麼都來了,不管你想要什麼。第一,學會本行業所需要的一切知識並有所發展。已故零件大王布魯丹在...