package com.xgx.demo2;
public class Store {
private int count;
public final int Size;
public Store(int size){
this.Size=size;
count=0;
}
public synchronized void addData(){
while (count==Size){
try{
this.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
count++;
System.out.println(Thread.currentThread().getName()+" add Date:"+count);
this.notifyAll();
}
public synchronized void removeDate(){
while (count==0){
try{
this.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+" remove date:"+count);
count--;
this.notifyAll();
}
}
package com.xgx.demo2;
public class Producer1 extends Thread{
private Store store;
public Producer1(String name,Store store){
super(name);
this.store = store;
}
public void run(){
try{
for(int i=0;i<5;i++){
store.addData();
Thread.sleep(100);
}
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
package com.xgx.demo2;
public class Customer1 extends Thread{
private Store store;
public Customer1(String name,Store store){
super(name);
this.store=store;
}
public void run(){
try{
for(int i=0;i<10;i++){
store.removeDate();
Thread.sleep(200);
}
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
package com.xgx.demo2;
public class Example11_5 {
public static void main(String[] args) {
Store s = new Store(5);
Producer1 p1 = new Producer1("A",s);
Producer1 p2 = new Producer1("B",s);
Customer1 c1 = new Customer1("C",s);
Customer1 c2 = new Customer1("D",s);
p1.start();
p2.start();
c1.start();
c2.start();
}
}
A add Date:1
B add Date:2
C remove date:2
D remove date:1
B add Date:1
A add Date:2
C remove date:2
D remove date:1
A add Date:1
B add Date:2
A add Date:3
B add Date:4
D remove date:4
C remove date:3
A add Date:3
B add Date:4
D remove date:4
C remove date:3
C remove date:2
D remove date:1//结果所示