java 生產消費者模式 一

2021-07-08 13:42:33 字數 1511 閱讀 7603

需求:一瓶酒兩元,兩個瓶子換一瓶酒,四個瓶蓋換一瓶酒,那麼買100瓶酒最少需要多少錢!

實現方法有很多種,這裡我採用最簡單的synchronized 同步實現

瓶子和瓶蓋換酒有四種可能:

1:瓶子 >=2 並且 蓋子 >= 4 可以一次換兩瓶酒, 換完後,會多兩個瓶子和瓶蓋

2:瓶子 >= 2 且 蓋子 < 4 可以換一瓶酒,換完後,會乙個瓶子合乙個蓋子

3:瓶子 < 2 且 蓋子 >=4 可以換一瓶酒,換完後,會乙個瓶子合乙個蓋子

4: 瓶子 < 2 且 蓋子 < 4 不能換酒,需要掏2元錢買

package com.jack.thread;

/** * @author lvh

* 一瓶酒兩元,兩個瓶子換一瓶酒,四個瓶蓋換一瓶酒,那麼買100瓶酒最少需要多少錢

*/public class beertest

}class sellbeer implements runnable

public void run()

return;

}}class buybeer implements runnable

public void run()

system.out.println(thread.currentthread().getname() +

" total = "+ beer.money + " beers "+beer.beers + " bottles = "+ beer.bottles + " caps = "+ beer.caps);

return; }}

class beer

public synchronized void addbeer()

//買啤酒

public synchronized void buy()

try

this.notify();

} catch (interruptedexception e)

money = money + 2;

addbeer(); }

//用瓶子或蓋子兌換啤酒

public synchronized void sell()

try

this.notify();

} catch (interruptedexception e)

try catch (interruptedexception e)

if(bottles >= 2 && caps >= 4 && beer.total > beers) else if(bottles >= 2 && beer.total > beers) else if(caps >= 4 && beer.total > beers)

}}

答案:54元能買100瓶啤酒,還剩2個瓶子,4個蓋子

這個題目再變形一下!

一瓶酒兩元,兩個瓶子換一瓶酒,四個瓶蓋換一瓶酒,那麼100元錢能最多能買多少瓶酒!

有興趣的,可以考慮下喲!

生產者 消費者模式 java

生產者 消費者模式要求在同乙個程序位址空間內執行的兩個執行緒。生產者執行緒生產物品,然後將物品放置在乙個空緩衝區中供消費者執行緒消費。消費者執行緒從緩衝區中獲得物品,然後釋放緩衝區。當生產者執行緒生產物品時,如果沒有空緩衝區可用,那麼生產者執行緒必須等待消費者執行緒釋放出乙個空緩衝區。當消費者執行緒...

java 執行緒 生產者消費者模式

需要到object類中的等待與通知的倆個方法如下 notify 喚醒正在等待物件監視器的單個執行緒。notifyall 喚醒正在等待物件監視器的所有執行緒。wait 導致當前執行緒等待,直到另乙個執行緒呼叫該物件的 notify 方法或 notifyall 方法。其中wait 方法和sleep 方法...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...