java线程通信 生产者与消费者模式
2016-11-23 14:57
453 查看
//共享队列
class Queue{
int value=0;
boolean isEmpty = true;
public synchronized void put(int v){
if(!isEmpty){
try{
System.out.println("生产者等待消费者消费。。。");
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
value += v;
System.out.println("生产者生产了:"+value+"个");
notify();
}
public synchronized int get(){
if(isEmpty){
System.out.println("消费者等待生产者生产。。。");
wait();
}
--value;
System.out.println("消费者消费了一个,剩余:"+value+"个");
if(value < 1 ){
isEmpty = true;
}
notify();
return value;
}
}
//生产者
class Producer extends Thread{
private Queue q;
public Producer(Queue q){
this.q = q;
}
public void run(){
for(int i=1;i<6;i++){
q.put(i);
}
}
}
//消费者
class Consumer extends Thread{
private Queue q ;
public Consumer (Queue q){
this.q=q;
}
public void run(){
while(true){
q.get();
}
}
}
// 测试
public PCModelTest{
Queue q = new Queue();
Thread producer =newProducer (q);
Thread consumer =new Consumer(q);
producer.start();
consumer.start();
}
class Queue{
int value=0;
boolean isEmpty = true;
public synchronized void put(int v){
if(!isEmpty){
try{
System.out.println("生产者等待消费者消费。。。");
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
value += v;
System.out.println("生产者生产了:"+value+"个");
notify();
}
public synchronized int get(){
if(isEmpty){
System.out.println("消费者等待生产者生产。。。");
wait();
}
--value;
System.out.println("消费者消费了一个,剩余:"+value+"个");
if(value < 1 ){
isEmpty = true;
}
notify();
return value;
}
}
//生产者
class Producer extends Thread{
private Queue q;
public Producer(Queue q){
this.q = q;
}
public void run(){
for(int i=1;i<6;i++){
q.put(i);
}
}
}
//消费者
class Consumer extends Thread{
private Queue q ;
public Consumer (Queue q){
this.q=q;
}
public void run(){
while(true){
q.get();
}
}
}
// 测试
public PCModelTest{
Queue q = new Queue();
Thread producer =newProducer (q);
Thread consumer =new Consumer(q);
producer.start();
consumer.start();
}
相关文章推荐
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
- Java多线程之线程间通信--生产者/消费者模式
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
- Java中的线程(七)- 生产者消费者模式
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- Thinking in Java---线程通信+三种方式实现生产者消费者问题
- JAVA 线程间通信 -生产者消费者JDK5.0升级版
- JAVA学习笔记(1)_____模拟线程通信之生产者消费者问题
- Java线程通信练习之“生产者/消费者问题”
- java多线程-线程间通信_生产者消费者
- Java线程间通信问题分析(生产者消费者模型)
- java: 线程间通信经典模型“生产者-消费者”模型的实现
- java多线程之 生产者和消费者 线程间通信 等待与唤醒机制
- 线程通信,生产者消费者问题(Java)
- Java线程间的相互通信--生产者消费者问题
- Java基础学习6_多线程(线程间通信--生产者消费者)
- 【Java】线程wait() notify()通信 实现生产者 消费者问题
- 线程通信,生产者消费者问题(Java)
- java多线程线程通信——生产者和消费者