生產者與消費者問題

2021-10-07 01:36:56 字數 1836 閱讀 3568

使用synchronized同步鎖機制,執行緒先獲得物件的鎖,先上鎖後執行執行緒內容,執行完成後釋放鎖。

/**

* 使用wait()和notifyall()簡單實現生產者與消費者

*/public class test1

class producer implements runnablecatch (interruptedexception e)

synchronized (obj)catch (interruptedexception e)

}count++;

system.out.println("生產後:"+count);

obj.notifyall();}}

}}

class consumer implements runnablecatch (interruptedexception e)

synchronized (obj)catch (interruptedexception e)

}count--;

system.out.println("消費後:"+count);

obj.notifyall();}}

}}

}

執行結果之一:

reentrantlock是顯示鎖,他可以和condition聯用,它的作用就是代替object的那些監視器方法,condition 中的await()、signal()和signalall()方法分別對應著object的wait()、notify()和notifyall()方法。乙個lock可以關聯多個condition,使用起來比較靈活

/**

* 使用reentrantlock簡單實現生產者與消費者

*/public class test2

class producer implements runnablecatch (interruptedexception e)

//獲取鎖

lock.lock();

trycatch (interruptedexception e)

}count++;

system.out.println("生產後:"+count);

//喚醒消費者

notempty.signal();//喚醒乙個等待程序

}finally }}

}class consumer implements runnablecatch (interruptedexception e)

lock.lock();

try catch (exception e)

}count--;

system.out.println("消費後:"+count);

notfull.signal();

}finally }}

}}

執行結果之一:

建立乙個阻塞佇列,在隊列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。

/**

* 使用阻塞佇列簡單實現生產者與消費者

*/public class test3

class producer implements runnablecatch (interruptedexception e)

trycatch (interruptedexception e)}}

}class consumer implements runnablecatch (interruptedexception e)

try catch (interruptedexception e)}}

}}

執行結果之一:

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

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

生產者與消費者問題

知識點 生產者與消費者問題 涉及到的執行緒間通訊的方法 wait 當前執行緒掛起並放棄cpu,同步資源,使別的執行緒可訪問並修改共享資源,當前執行緒排隊等候再次對資源訪問 notify 喚醒正在排隊等待同步資源的執行緒中優先順序最高者結束等待 notifyall 喚醒正在排隊等待資源的所有執行緒結束...

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...