public class producerandconsumer
}//倉庫
class storage
// 生產者往倉庫中放入產品
public synchronized void push(product product) catch (interruptedexception ex)
} //把產品放入倉庫
products[index++] = product;
system.out.println(product.getproducer() + " 存入了產品 " + product + " ,倉庫共有 " + this.index + "個產品!");
//喚醒等待執行緒
notifyall();
} // 消費者從倉庫中取出產品
public synchronized product pop(string consumer) catch (interruptedexception ex)
} //從倉庫中取產品
product product = products[--index];
products[index] = null;
system.out.println(consumer + " 消費了產品 " + product + " ,倉庫共有 " + this.index + "個產品!");
//喚醒等待執行緒
notifyall();
return product; }}
//產品類
class product
public long getid()
public string getproducer()
@override
public string tostring()
}//生產者
class producer extends thread
@override
public void run() catch (interruptedexception ex)
} }}//消費者
class consumer extends thread
@override
public void run() catch (interruptedexception ex)
} }}
* 多執行緒同步 synchronized方法和**塊:每個物件都有乙個鎖,當執行緒進入物件的synchronized方法或
**塊時,該執行緒獲得物件的鎖,其他執行緒在訪問該物件的任何synchronized方法或**塊時無法獲得
鎖被掛起等待。物件的其他非synchronized方法不受鎖的影響。
* static synchronized方法的鎖物件是classname.class。
java多執行緒(生產者 消費者)
if isempty 當生產者生產出來商品需要喚醒消費者消費,可進行如下控制 vector.vector.notify 喚醒消費方法還用到了同步的方法,具體語法如下 synchronized vector.vector 程式源 如下 public class thread01 public stat...
多執行緒 生產者和消費者
生產者 消費者問題 生產者向產品區里放產品,當產品區里滿了,需要等待 消費者從產品區里取產品消耗,當產品區里空了,需要等待。public class producerandconsumer 消費者 static class consumer implements runnable catch int...
多執行緒 生產者和消費者
前面說過,每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式。這可能帶來的問題就是幾個執行緒同時執行乙個函式,導致資料的混亂,產生不可預料的結果,因此我們必須避免這種情況的發生。c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥...