public class IntData {
private int num=0;
private boolean isProduced=false;
public synchronized void puShareChar() {
//如果产品还没有消费,则生产者等待
if (isProduced) {
try {
wait();//生产者等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.num++;
isProduced=true;//标记已经生产
notify();//通知消费者已经生产,可以消费
System.out.println(num);
}
public synchronized int getShareChar() {
//产品还没有生产,则消费者等待
if (!isProduced) {
try {
wait();//消费者等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
isProduced=false;//标记已经消费
notify();//通知需要生产
this.num--;
System.out.println(this.num);
return this.num;
}
}
public class IntJia extends Thread {
private IntData intData;
public IntJia(IntData intData){
this.intData=intData;
}
public void run() {
for(int ch=1;ch<100;ch++){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
intData.puShareChar();//将产品放入仓库
}
}
}
public class IntJIan extends Thread{
private IntData intData;
public IntJIan(IntData intData){
this.intData=intData;
}
public void run() {
for(int ch=1;ch<100;ch++){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
ch=intData.getShareChar();//将产品放入仓库
System.out.println();
}
}
}
public class TestInt {
public static void main(String[] args) {
IntData intData=new IntData();
new IntJia(intData).start();
new IntJIan(intData).start();
}
}