public class Buy{
Object seller=new Object();
int twantyNumber=0;
int tenNumber=0;
int fiveNumber=1;
int all=5;
public Buy(){
printmony();
buyer zhao=new buyer("赵",2,20);
buyer qian=new buyer("钱",1,20);
buyer sun=new buyer("孙",1,10);
buyer li=new buyer("李",2,10);
buyer zhou=new buyer("周",1,5);
zhao.start();
qian.start();
sun.start();
li.start();
zhou.start();
}
class buyer extends Thread{
int number=0;
int mony=0;
String name=null;
boolean hasBuyed=false;
public buyer(String name,int number,int mony) {
this.number=number;
this.mony=mony;
this. name=name;
}
void print(int i){
if(i==0){System.out.println(name+" 正在买 "+number+" 张票 "+ mony+ "元钱");
}
if(i==1){System.out.println(name+" 已经买完 !");
printmony();
}
}
public void run(){
while(!hasBuyed){
synchronized (seller) {
int charge=mony-number*5;
if((tenNumber>=charge/10&&fiveNumber>=(charge%10)/5)||charge==0){
print(0);
if(mony==20)twantyNumber++;
if(mony==10)tenNumber++;
if(mony==5)fiveNumber++;
tenNumber-=charge/10;
fiveNumber-=(charge%10)/5;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
print(1);
hasBuyed=true;
seller.notifyAll();
}else{
try {
seller.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
void printmony(){
System.out.println("\t 售票员的钱数:");
System.out.println("\t\t\t20元\t10元\t五元");
System.out.println("\t\t\t"+twantyNumber+"张\t"+tenNumber+"张\t"+fiveNumber+"张");
}
public static void main(String[] s){
new Buy();
}
}
结果:
售票员的钱数:
20元 10元 五元
0张 0张 1张
孙 正在买 1 张票 10元钱
孙 已经买完 !
售票员的钱数:
20元 10元 五元
0张 1张 0张
赵 正在买 2 张票 20元钱
赵 已经买完 !
售票员的钱数:
20元 10元 五元
1张 0张 0张
周 正在买 1 张票 5元钱
周 已经买完 !
售票员的钱数:
20元 10元 五元
1张 0张 1张
李 正在买 2 张票 10元钱
李 已经买完 !
售票员的钱数:
20元 10元 五元
1张 1张 1张
钱 正在买 1 张票 20元钱
钱 已经买完 !
售票员的钱数:
20元 10元 五元
2张 0张 0张