java解決單緩沖生產(chǎn)者消費(fèi)者問(wèn)題示例
經(jīng)典的生產(chǎn)者消費(fèi)者問(wèn)題模擬。此程序模擬最簡(jiǎn)單情形——單緩沖。為模擬實(shí)際情況,consume item和produce item時(shí)加了延時(shí),可以通過(guò)修改延時(shí)模擬不同的生成消費(fèi)速率。
[code]
[/co/**
* single buffer consumer-producer problem.
* by xu(xusiwei1236@163.com).
* */
public class ConsumerProducer {
static Object buffer = null;
static Object mutex = new Object();
static Object condConsumer = new Object();
static Object condProducer = new Object();
public static void main(String[] args) {
Thread producer = new Thread() {
public void run() {
// for(int i=0; i<10; i++) {
for(int i=0; ; i++) {
// produce item.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String item = new String("item-" + i);
System.out.println("[producer] produced " + item);
// wait for buffer empty.
synchronized (condProducer) {
while(buffer != null) {
try {
condProducer.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// put item to buffer.
synchronized (mutex) {
buffer = item;
System.out.println("[producer] put " + item + " to buffer.");
}
// notify consumers.
synchronized (condConsumer) {
condConsumer.notify();
}
}
}
};
Thread consumer = new Thread() {
public void run() {
// for(int i=0; i<10; i++) {
for( ; ; ) {
// wait for item come.
synchronized (condConsumer) {
while( buffer == null ) {
try {
condConsumer.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// get item from buffer.
String item = null;
synchronized (mutex) {
item = (String)buffer;
buffer = null;
System.out.println(" [consumer] get " + item + " from buffer.");
}
// consume item.
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" [consumer] comsumed " + item);
// notify producers.
synchronized (condProducer) {
condProducer.notify();
}
}
}
};
consumer.start();
producer.start();
}
}de]
- 基于Java 生產(chǎn)者消費(fèi)者模式(詳細(xì)分析)
- Java多線程之線程通信生產(chǎn)者消費(fèi)者模式及等待喚醒機(jī)制代碼詳解
- JAVA生產(chǎn)者消費(fèi)者(線程同步)代碼學(xué)習(xí)示例
- java多線程解決生產(chǎn)者消費(fèi)者問(wèn)題
- JAVA多線程實(shí)現(xiàn)生產(chǎn)者消費(fèi)者的實(shí)例詳解
- Java實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題與讀者寫(xiě)者問(wèn)題詳解
- java并發(fā)學(xué)習(xí)之BlockingQueue實(shí)現(xiàn)生產(chǎn)者消費(fèi)者詳解
- java 中多線程生產(chǎn)者消費(fèi)者問(wèn)題詳細(xì)介紹
- Java基于Lock的生產(chǎn)者消費(fèi)者模型示例
- Java生產(chǎn)者消費(fèi)者模式實(shí)例分析
相關(guān)文章
Maven學(xué)習(xí)----Maven安裝與環(huán)境變量配置教程
這篇文章主要給大家介紹了關(guān)于如何利用Maven入手Spring Boot第一個(gè)程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
Java利用位運(yùn)算實(shí)現(xiàn)加減運(yùn)算詳解
這篇文章主要為大家介紹了如何使用位運(yùn)算來(lái)實(shí)現(xiàn)加減功能,也就是在整個(gè)運(yùn)算過(guò)程中不能出現(xiàn)加減符號(hào)。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-12-12
SpringBoot整合Graylog做日志收集實(shí)現(xiàn)過(guò)程
這篇文章主要為大家介紹了SpringBoot整合Graylog做日志收集實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
關(guān)于Java語(yǔ)法糖以及語(yǔ)法糖的原理和用法
這篇文章主要介紹了關(guān)于Java什么是語(yǔ)法糖以及語(yǔ)法糖的種類,也稱糖衣語(yǔ)法,是由英國(guó)計(jì)算機(jī)學(xué)家?Peter.J.Landin?發(fā)明的一個(gè)術(shù)語(yǔ),指在計(jì)算機(jī)語(yǔ)言中添加的某種語(yǔ)法,這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用,需要的朋友可以參考下2023-05-05
Shiro整合Springboot和redis,jwt過(guò)程中的錯(cuò)誤shiroFilterChainDefinition問(wèn)
這篇文章主要介紹了Shiro整合Springboot和redis,jwt過(guò)程中的錯(cuò)誤shiroFilterChainDefinition問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Java xml數(shù)據(jù)格式返回實(shí)現(xiàn)操作
這篇文章主要介紹了Java xml數(shù)據(jù)格式返回實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08

