java解决单缓冲生产者消费者问题示例
经典的生产者消费者问题模拟。此程序模拟最简单情形――单缓冲。为模拟实际情况,consume item和produce item时加了延时,可以通过修改延时模拟不同的生成消费速率。
[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多线程解决生产者消费者问题
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- Java多线程解决生产者和消费者问题(面向对象)
- 用JAVA中的多线程示例生产者和消费者问题
- 22.用JAVA中的多线程示例生产者和消费者问题
- java中使用阻塞队列解决生产者消费者问题
- 关于java用阻塞队列解决生产者消费者问题总结
- java 生产者消费者问题 并发问题的解决
- java实现 生产者和消费者问题 多线程同步示例
- java多线程解决生产者消费者问题
- Java 管程解决生产者消费者问题
- java 多线程 详解 生产者消费者 问题解决
- 用JAVA中的多线程示例生产者和消费者问题
- java 生产者消费者问题 并发问题的解决(转)
- java信号量PV操作 解决生产者-消费者问题
- 生产者与消费者的问题(Java版)
- Java高并发编程-生产者消费者问题
- Java线程(三):线程协作-生产者/消费者问题
- 线程的相关知识、JAVA实现死锁、生产者消费者问题
- Java中的生产者消费者问题(多线程间同步通信)