Producer &Consumer
2016-01-21 15:42
183 查看
package jms; import java.util.ArrayList; import java.util.List; public class JmsDemo2 { static final int threadInitNumber = 1; public static void main(String[] args) { Store store = new JmsDemo2().new Store(); List<Thread> producers = new ArrayList<Thread>(); List<Thread> consumers = new ArrayList<Thread>(); for(int i=0;i<threadInitNumber;i++){ producers.add(new Thread(new JmsDemo2().new Producer(store),"【第" + (i+1) +"个生产者】")); consumers.add(new Thread(new JmsDemo2().new Consumer(store),"【第" + (i+1) +"个消费者】")); } for(int i=0;i<threadInitNumber;i++){ producers.get(i).start(); consumers.get(i).start(); } } class Store { private List<String> entry = new ArrayList<String>(); private boolean isProducer = true; public synchronized void push(String msg){ while(isProducer){ entry.add(msg); System.out.println("生产数据" + msg + "等待消费,当前队列深度" + entry.size()); isProducer = false; try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("push end isProducer" + isProducer); } notifyAll(); } public synchronized void get(){ while(!isProducer){ if(entry.isEmpty()){ System.out.println("当前队列为空,等待生产..."); } System.out.println("消费" + entry.remove(entry.size()-1) + "等待生产,当前队列深度" + entry.size()); isProducer = true; try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("get end isProducer" + isProducer); } notifyAll(); } } class Producer implements Runnable{ Store store; public Producer(Store store) { super(); this.store = store; } @Override public void run() { store.push(Thread.currentThread().getName()); } } class Consumer implements Runnable{ Store store; public Consumer(Store store) { super(); this.store = store; } @Override public void run() { store.get(); } } }
相关文章推荐
- AWT使用ImageProducer/ImagConsumer模式加载和显示图像的原理(转)
- 多线程设计模式之Producer Consumer模式
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- Producer Consumer problem - mutex and semaphore
- Etw EventSourceProvider_EventsProducer.cs OopConsoleTraceEventListenerMonitor_TraceControllerEventsConsumer.cs
- java160110ProducerConsumerDemo
- 本地Consumer和Producer无法使用远程Kafka服务器的处理办法
- Producer-Consumer模式
- SimpleProducer应用程序和SimpleConsumer应用程序
- Kafka入门,producer和consumer与hive
- ActiveMQ应用笔记二:Producer与Consumer模板代码
- 使用c++11重新实现producer和consumer模型
- linux下C语言实现多线程通信—环形缓冲区,可用于生产者(producer)/消费者(consumer)
- 漫游Kafka设计篇之Producer和Consumer
- windows平台下,采用kafka作为消息中间件,consumer和producer采用java api (环境搭建)
- java160110ProducerConsumerDemo2
- producer-consumer问题的分析和讨论
- 【NDN实验】Consumer-Producer API for Named Data Networking 全文翻译
- Java:多线程Producer-Consumer的多种实现
- Kafka的Producer以及Consumer远程调用问题