package com.test;
public class WaitNotify {
private final int CAPACITY = 10;
private volatile int size = 0;
private final Object lock = new Object();
public void Consumer(){
synchronized (lock) {
while(size <= 0){
System.out.println("consumer wait");
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
size --;
System.out.println("Consume a product, size:"+size);
lock.notify();
}
}
public void Productor(){
synchronized (lock) {
while(size == CAPACITY){//read
System.out.println("productor wait");
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
size ++;
System.out.println("Produce a product, size:"+size);
lock.notify();
}
}
public static void main(String[] args) {
WaitNotify waitNotify = new WaitNotify();
for(int i=0;i<2;i++){
new Thread(()->{while(true)waitNotify.Consumer();}).start();
}
for(int i=0;i<2;i++){
new Thread(()->{while(true)waitNotify.Productor();}).start();
}
for(int i=0;i<111;i++){
new Thread(()->{waitNotify.Productor();}).start();
}
for(int i=0;i<111;i++){
new Thread(()->{waitNotify.Consumer();}).start();
}
}
}