生產者與消費者問題是了解多執行緒的基本例項,就像hello world之於語言學習,下面我們就編寫乙個生產者-消費者的示例
public class test
try catch (interruptedexception e)
exes.shutdownnow(); }}
class producer implements runnable
@override
public void run() catch (interruptedexception e) }}
class consumer implements runnable
@override
public void run() catch (interruptedexception e)
} }class storage
public synchronized void produce()throws interruptedexception
num+=5;
system.out.println("生產產品數:"+5+" 倉庫還剩產品數:"+num);
notifyall(); }
public synchronized void consume()throws interruptedexception
num-=7;
system.out.println("消費產品數:"+7+" 倉庫還剩產品數:"+num);
notifyall();
}}
以上是通過wait()和notifyall synchronized關鍵字進行執行緒之間的同步,現在我們嘗試另外一種方法,通過使用同步佇列來解決任務的協作
問題,如果消費者試圖從佇列中獲取物件,而此時隊列為空,阻塞佇列就會掛起消費者執行緒,同理如果參考已經滿了,生產者試圖向佇列
中新增物件,此時佇列將掛起生產者執行緒。
public class mydata
try catch (interruptedexception e)
exes.shutdownnow();
system.out.println("倉庫最後剩餘數:"+storage.queue.size()); }}
class producer implements runnable
@override
public void run() catch (interruptedexception e) }}
class consumer implements runnable
@override
public void run() catch (interruptedexception e)
} }class storage
public void produce()throws interruptedexception }}
class product
}
多執行緒 Java多執行緒與併發
實現的方式主要有三種 執行緒的狀態 基本差別 最主要的本質區別 兩個概念 鎖池 假設執行緒a已經擁有了某個物件 不是類 的鎖,而其他執行緒b c想要呼叫這個物件的某個synchronized方法 或者塊 由於b c執行緒在進入物件的synchronized方法 或者塊 之前必須先獲得該物件鎖的擁有權...
Java多執行緒與併發 Java鎖
累嗎?累就對了,說明你還活著 公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,先來後到。非公平鎖 是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖。在高併發的情況下,有可能會造成優先順序反轉或者飢餓現象 並發包中reentrantlock...
Java併發系列五 深入理解volatile關鍵字
instance new instancce instance是volatile變數 這個寫回記憶體的操作會使得其他cpu裡快取了該記憶體位址的資料無效 乙個處理器的快取回寫到記憶體會導致其他處理器的快取失效 當處理器發現本地快取失效後,就會從記憶體中重讀該變數資料,即可以獲取當前最新值。publi...