Producter And Consumer
来源:互联网 发布:知乎 关于毛泽东的书 编辑:程序博客网 时间:2024/05/22 06:11
package mypack;import java.util.LinkedList;public class Products<T> {private int MAX_SIZE=100;private LinkedList<T> products=new LinkedList<T>();public boolean isFull(){return products.size()==MAX_SIZE;}public boolean isEmpty(){return products.isEmpty();}public boolean addEnable(int num){return products.size()+num<MAX_SIZE?true:false;}public boolean getEnable(int num){return products.size()>num;} public T getProduct(){ return products.remove(); } public void addProduct(T e){ products.add(e); }}
用 wait() 和notify() notifyAll()实现
package mypack;public class Producter implements Runnable {private Products<Integer> products;private int num;public Producter(Products<Integer> p) {products = p;}public void setNum(int n) {num = n;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {synchronized (products) {while (!products.addEnable(num))products.wait();for (int i = 0; i < num; i++) {System.out.print(i + " ");products.addProduct(i);}System.out.println("已生产品的个数为" + num);products.notifyAll();}}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println("Producter interrupted");}}}
package mypack;public class Consumer implements Runnable {private int num;private Products<Integer> products;public Consumer(Products<Integer> p) {products = p;}public void setNum(int n) {num = n;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {synchronized (products) {while (!products.getEnable(num)) products.wait();for (int i = 0; i < num; i++)System.out.print(products.getProduct() + " ");System.out.println("消费者消费产品的个数为" + num);products.notifyAll();}}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println("Consumer interrupted");}}}
package mypack;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubProducts<Integer> products=new Products<>();ExecutorService exec = Executors.newCachedThreadPool();Producter p1 = new Producter(products);p1.setNum(15);Producter p2 = new Producter(products);p2.setNum(5);Producter p3 = new Producter(products);p3.setNum(10);Consumer c1 = new Consumer(products);c1.setNum(20);Consumer c2 = new Consumer(products);c2.setNum(5);exec.execute(p1);exec.execute(p2);exec.execute(p3);exec.execute(c1);exec.execute(c2);try {TimeUnit.MILLISECONDS.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}exec.shutdownNow();}}
运用lock 和Condition Test不变
</pre><pre name="code" class="java">package mypack;import java.util.LinkedList;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Products<T> {private ReentrantLock lock=new ReentrantLock();private Condition full=lock.newCondition();private Condition empty=lock.newCondition();private int MAX_SIZE=100;private LinkedList<T> products=new LinkedList<T>();public boolean isFull(){return products.size()==MAX_SIZE;}public boolean isEmpty(){return products.isEmpty();}public boolean addEnable(int num){return products.size()+num<MAX_SIZE?true:false;}public boolean getEnable(int num){return products.size()>num;} public T getProduct(){ return products.remove(); } public void addProduct(T e){ products.add(e); } public void lockProducts(){ lock.lock(); } public void unlockProducts(){ lock.unlock(); } public void fullWait() throws InterruptedException{ full.await(); } public void fullSingal(){ full.signalAll(); } public void emptyWait() throws InterruptedException{ empty.await(); } public void emptySinal(){ empty.signalAll(); } }
package mypack;public class Producter implements Runnable {private Products<Integer> products;private int num;public Producter(Products<Integer> p) {products = p;}public void setNum(int n) {num = n;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {try{products.lockProducts();while (!products.addEnable(num))products.fullWait();for (int i = 0; i < num; i++) {System.out.print(i + " ");products.addProduct(i);}System.out.println("已生产品的个数为" + num);products.emptySinal();}finally{products.unlockProducts();}}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println("Producter interrupted");}}}
package mypack;public class Consumer implements Runnable {private int num;private Products<Integer> products;public Consumer(Products<Integer> p) {products = p;}public void setNum(int n) {num = n;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {try{products.lockProducts();while (!products.getEnable(num)) products.emptyWait();for (int i = 0; i < num; i++)System.out.print(products.getProduct() + " ");System.out.println("消费者消费产品的个数为" + num);products.fullSingal();}finally{products.unlockProducts();}}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println("Consumer interrupted");}}}
用阻塞队列LinkedBlockingQueue
package mypack;import java.util.concurrent.LinkedBlockingQueue;public class Products<T> {private int MAX_SIZE=100;private LinkedBlockingQueue<T> products=new LinkedBlockingQueue<>(MAX_SIZE);public boolean isFull(){return products.size()==MAX_SIZE;}public boolean isEmpty(){return products.isEmpty();}public boolean addEnable(int num){return products.size()+num<MAX_SIZE?true:false;}public boolean getEnable(int num){return products.size()>num;} public T getProduct() throws InterruptedException{ return products.take(); } public void addProduct(T e) throws InterruptedException{ products.put(e); }}
package mypack;public class Producter implements Runnable {private Products<Integer> products;private int num;public Producter(Products<Integer> p) {products = p;}public void setNum(int n) {num = n;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {for (int i = 0; i < num; i++) {System.out.print(i + " ");products.addProduct(i);}System.out.println("已生产品的个数为" + num);}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println("Producter interrupted");}}}
package mypack;public class Consumer implements Runnable {private int num;private Products<Integer> products;public Consumer(Products<Integer> p) {products = p;}public void setNum(int n) {num = n;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {for (int i = 0; i < num; i++)System.out.print(products.getProduct() + " ");System.out.println("消费者消费产品的个数为" + num);}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println("Consumer interrupted");}}}
0 0
- Producter And Consumer
- everyday one code - producter and consumer
- python producer and consumer
- producer and consumer
- JAVA Producer and Consumer
- camel producer and consumer templates
- Java 8 Consumer and Supplier
- Consumer
- Web Systems Design and Online Consumer Behavior
- Web Systems Design and Online Consumer Behavior
- Producer Consumer problem - mutex and semaphore
- linux线程7(manufacturer and consumer)
- Maintaining Consumer Groups, Plans, and Directives
- MULTITHREADING - PRODUCER AND CONSUMER WITH QUEUE
- Kafka基本知识一 Producer and Consumer
- surfaceflinger create layer and how consumer works
- Fast synchronization between a single producer and single consumer
- Java Lock and Condition Example using Producer Consumer Solution
- 奥运赛事的一点小感慨
- 关于支付接口的调用(感谢beecloud)
- Android开发笔记——视频录制播放常见问题
- 纯C/C++解析PNG工具
- poj 1321 棋盘问题
- Producter And Consumer
- imageLoader加载图片配置
- sftp上传
- HDU 1257 最少拦截系统
- 谈软件系统的标准化和产品化
- Docker“Swarm模式”欲抢占Kubernetes的风头
- spirng+redis 发布订阅
- Codeforces Round #365 (Div. 2)
- java 播放音频