public class Test{
public static void main(String[] args){
Basket b = new Basket(5);
Producer p1 = new Producer(b);
Consumer s1 = new Consumer(b);
new Thread(p1,"生产者1").start();
new Thread(s1,"消费者1").start();
new Thread(p1,"生产者2").start();
new Thread(s1,"消费者2").start();
new Thread(p1,"生产者3").start();
new Thread(s1,"消费者3").start();
new Thread(s1,"消费者4").start();
}
}
class Apple{
int id;
Apple(int id){
this.id = id;
}
}
class Basket{
Apple[] valume;
int index = 0;
Basket(int val){
valume = new Apple[val];
}
synchronized void put(Apple a){
while(index == valume.length){
try{
this.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
this.notifyAll();
valume[index]= a;
index ++;
}
synchronized Apple get(){
while(index == 0){
try{
this.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
this.notifyAll();
index --;
return valume[index];
}
}
class Producer implements Runnable{
Basket b;
Apple a;
int count = 0;
boolean flag = true;
Producer(Basket b){
this.b = b;
}
public void run(){
while(flag){
if(count == 100){
return;
}
synchronized (this){
count++;
System.out.println(Thread.currentThread().getName() + ":++++++++" + "put a apple,count = "+ count);
}
b.put(new Apple(0));
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
Basket b;
Apple a;
String lock = new String("lock");
int count = 0;
boolean flag = true;
Consumer(Basket b){
this.b = b;
}
public void run(){
while(flag){
if(count == 100){
return;
}
synchronized(lock){
count++;
System.out.println(Thread.currentThread().getName() + ":"+"get a apple,outcount = "+ count);
}
a = b.get();
try{
Thread.sleep(500);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
多生产者和多消费者
最新推荐文章于 2022-05-22 14:32:25 发布