存储结构,生产者到达最大长度等待消费者消费,没有存储数据,消费者等待生产者生产:
package ProductConsumer;
import java.util.LinkedList;
import java.util.List;
import java.util.Date;
/**
* Created by Administrator
*/
public class EventStorage {
private int maxSize;
private List<Date> storage;
public EventStorage(){
maxSize = 10;
storage = new LinkedList<Date>();
}
public synchronized void set(){
while(storage.size() == maxSize){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
storage.add(new Date());
System.out.printf("Set: %d\n", storage.size());
notifyAll();
}
public synchronized void get(){
while(storage.size() == 0){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.printf("Get: %d: %s\n", storage.size(), ((LinkedList<?>)storage).poll());
notifyAll();
}
}
生产者:
public class Producer implements Runnable {
private EventStorage storage;
public Producer(EventStorage storage){
this.storage = storage;
}
@Override
public void run(){
for(int i=0; i<100; i++){
storage.set();
}
}
}
消费者:
public class Consumer implements Runnable {
private EventStorage storage;
public Consumer(EventStorage storage){
this.storage = storage;
}
@Override
public void run(){
for(int i=0; i<100; i++){
storage.get();
}
}
}
public class Main {
public static void main(String[] args){
EventStorage storage = new EventStorage();
Producer producer = new Producer(storage);
Thread thread1 = new Thread(producer);
Consumer consumer = new Consumer(storage);
Thread thread2 = new Thread(consumer);
thread2.start();
thread1.start();
}
}
notify和wait比synchronized灵活。
分享到:
相关推荐
非常好的程序资源,一秒钟一千多条!
ProducerAndConsumer 生产者和消费者模型java实现
ProducerConsumer(生产者消费者问题的单线程模拟) vs2008
别人的太贵了,自己写一份分享!c语言实现生产者消费者模型,支持设置生产者消费者线程数量,支持设置消息数量。消息的组织形式为链表。生产者生产消息和消费者处理消息分别需要对应的条件变量。代码编译方式见注释
Flex基于Producer和Consumer方式的简易消息推送机制
在Linux操作系统下用C或C++实现经典同步问题:生产者-消费者问题。 含源代码和文档。 内容: 1.一个大小为10的缓冲区,初始状态为空。 2.2个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲区已满,等待消费...
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/1721530
kafka集群搭建,开启sasl认证,并通过Python调用Producer和Consumer
/************************************************ * * The classic producer... /* Wait until producer and consumer finish. */ pthread_join(th_a, &retval); pthread_join(th_b, &retval); return 0; }
The use of producer-consumer questions helps to better understand threads.
PROGRAM NAME: PRODUCER_CONSUMER */ /* This program simulates two processes, producer which */ /* continues to produce message and put it into a buffer */ /* [implemented by PIPE], and consumer which ...
源代码包括五个类,consumer,producer,product,storage,producerandconsumer
(注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...
代码在这里
采用2个producer和一个Consumer把整数放入到(或者从中取出)一个环形缓冲Circle Buffer中,这块连续的存储会被反复使用。一个写指针指向数据写入的位置,如果写到Buffer的末端,则从Buffer的头端开始写。类似的,一...
producer-consumer-model 生产者-消费者模型
c语言。生产者消费者问题的信号量解决代码。简洁明了
ProducerConsumer-CSharp
java的多线程示例(生产者消费者问题)
57119101_王晨阳_ProducerConsumer1