public class ProducerConsumer {
static final int MAXBUFFER=100;
static Producer producer=new Producer();
static Consumer consumer=new Consumer();
static Monitor monitor=new Monitor();
public static void main(String[] args) {
producer.start();
consumer.start();
}
static class Producer extends Thread{
public void run(){
int item=0;
while(true){
//produceAction()
System.out.println("Producer insert "+item+" into buffer "+monitor.count);
monitor.insert(item);
}
}
}
static class Consumer extends Thread{
public void run(){
int item;
while(true){
item=monitor.remove();
//consumeAction()
System.out.println("Consumer remove "+item+" from buffer "+monitor.count);
}
}
}
//管程
static class Monitor{
int []buffer=new int[MAXBUFFER];
private int count=0,low=0,high=0;
public synchronized void insert(int val){
//if buffer is full,then go to sleep
if(count==MAXBUFFER) goToSleep();
buffer[high]=val;
high=(high+1)%MAXBUFFER;
count++;
//notify consumer
if(count==1) notify();
}
public synchronized int remove(){
int val;
if(count==0) goToSleep();
val=buffer[low];
low=(low+1)%MAXBUFFER;
count--;
if(count==MAXBUFFER-1) notify();
return val;
}
private void goToSleep(){
try{
wait();
} catch (Exception e) {
};
}
}
}
Java多线程解决生产者消费者问题
最新推荐文章于 2020-08-05 20:29:54 发布