[英]Producer/Consumer Threads Concurency Java
我有一個生產產品的生產者和一個消費它們的消費者。 我想要的是,如果5分鍾內沒有食用某種產品,我希望將其銷毀。
這是生產者的一部分:
boolean full = false;
public void produce(int p) throws RemoteException {
//choses a or b randomly
//if a or b spot is occupied, thread must wait()
synchronized(this){
if ((int)((Math.random()*10)%2) == 1){
while (a!=-1){try {
wait();
} catch (InterruptedException ex) {
Logger.getLogger(CHServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
a = p;
if (b!=-1) full = true;
notifyAll();
}
else {
while (b!=-1){try {
wait();
} catch (InterruptedException ex) {
Logger.getLogger(CHServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
b = p;
if (a!=-1) full = true;
notifyAll();
}
}
}
A和B應該是我的產品。
我真的不知道該如何測量該時間,例如當線程正在等待或客戶端未嘗試使用該產品時。 這段代碼在RMI Java服務器上運行。
我只是使用這樣的方案:當您產生某些東西時,請使用java.util.Timer()
將計時器設置為將來5分鍾。 消耗完商品后,請使用.cancel()
計時器。 如果計時器關閉,請執行所需的任何清理操作。
看來您正在實現一個具有2個插槽的隊列,這2個插槽是a和b。 但是選擇隨機時隙的策略並不是最佳的。 您可能需要等待一個插槽,而另一個插槽為空。 而且,消費者無法分辨您是先生產a還是b中的哪個。
無論如何,如果我對代碼理解得很好,您可以
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.