Java 实现生产者消费者问题
来源:互联网 发布:21天学通c语言 下载 编辑:程序博客网 时间:2024/06/05 21:50
最近复习Java,重写了生产者消费者问题。
采用synchronized锁以及wait notify方法实现。
package Thread;import java.util.LinkedList;class Producer implements Runnable{ ProducerConsumer p; String name; Producer(ProducerConsumer p, String name){ this.p = p; this.name = name; } @Override public void run(){ // TODO Auto-generated method stub while(true){ try{ Thread.sleep(1000); p.putOne(); } catch (InterruptedException e){ e.printStackTrace(); } } }}class Consumer implements Runnable{ ProducerConsumer p; String name; Consumer(ProducerConsumer p, String name){ this.p = p; this.name = name; } @Override public void run() { // TODO Auto-generated method stub while(true){ try{ Thread.sleep(1000); p.getOne(); } catch (InterruptedException e){ e.printStackTrace(); } } }}public class ProducerConsumer { private byte[] b = new byte[0]; private static LinkedList<Object> store = new LinkedList<Object>(); public int putOne() throws InterruptedException{ synchronized(b){ if(store.size() >= 10){ b.wait(); return 1; } else{ Object e = new Object(); store.add(e); System.out.println("Add one to " + store.size() + " by " + Thread.currentThread()); b.notifyAll(); return 0; } } } public int getOne() throws InterruptedException{ synchronized(b){ if(store.size() == 0){ System.out.println("before wait"); b.wait(); System.out.println("after wait"); return 1; //这里不return,直接removeFirst也可以。 } else{ store.removeFirst(); System.out.println("remove one to " + store.size() + " by " + Thread.currentThread()); b.notifyAll(); return 0; } } } public static void main(String[] args) { // TODO Auto-generated method stub ProducerConsumer P = new ProducerConsumer(); Runnable[] thread = new Runnable[6]; for(int i = 0; i < 3; ++i){ thread[i] = new Consumer(P, "Consumer" + i); } for(int i = 3; i < 6; ++i){ thread[i] = new Producer(P, "Producer" + i); } for(int i=0; i < 6; ++i){ new Thread(thread[i]).start(); } /* new Thread(thread[1]).start(); new Thread(thread[4]).start(); 上面两句输出的前三句一定为 before wait Add one to 1 by Thread[Thread-1,5,main] after wait */ }}
阅读全文
0 0
- 生产者-消费者问题【Java实现】
- 生产者-消费者问题 java实现
- java生产者消费者问题实现
- Java实现生产者消费者问题
- java实现生产者消费者问题
- 生产者消费者问题 --java实现
- Java实现生产者,消费者问题
- java实现生产者消费者问题
- java实现生产者消费者问题
- java实现生产者消费者问题
- java实现生产者消费者问题
- 生产者消费者问题、Java实现
- 生产者/消费者问题java实现
- java实现生产者消费者问题
- java实现生产者消费者问题
- Java实现生产者--消费者问题
- java实现生产者消费者问题
- Java 实现生产者消费者问题
- 发邮件报错:smtp.SMTPSendFailedException: 553 Mail from must equal authorized user=发件人邮箱写错
- java的native方法和JNI
- (c语言总结)关于一些简单的区别
- Oracle之DBMS_STATS.GATHER_TABLE_STATS详解
- Error: Can't find Python executable "python", you can set the PYTHON env variable.解决办法
- Java 实现生产者消费者问题
- mybatis的简单使用过程
- 8种排序方式
- 2017-11-6
- 工作反思
- Oracle之表空间的类别、体会以及脚本
- Java编程思想第四版第四章练习
- 逆波兰
- 方法重载