使用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...