需求:一瓶酒兩元,兩個瓶子換一瓶酒,四個瓶蓋換一瓶酒,那麼買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 方法...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...