题目:模拟3人排队买电影票,zhang,li,zhao依次排队购票,zhang有20元、li有10元、zhao有5元,售票员有3张5元。
主类:
package TEST1;
public class Moive {
public static void main(String[] args) {
// TODO Auto-generated method stub
Counter counter=new Counter();
Thread zhang=new Thread(counter);
Thread li=new Thread(counter);
Thread zhao=new Thread(counter);
zhang.setName("zhang");
li.setName("li");
zhao.setName("zhao");
zhang.start();
li.start();
zhao.start();
}
}
Counter类:
package TEST1;
public class Counter implements Runnable{
int fiveAmount=3,tenAmount=0,twentyAmount=0;
int change=fiveAmount*5+tenAmount*10;
public void run() {
if(Thread.currentThread().getName().equals("zhang")) {
setTicket(20);
}
if(Thread.currentThread().getName().equals("li")) {
setTicket(10);
}
if(Thread.currentThread().getName().equals("zhao")) {
setTicket(5);
}
}
private synchronized void setTicket(int money) {
if(money==20) {
while(!(fiveAmount>=1&&change>=15)) {
try {
System.out.println("not enough change to zhang");
wait();
System.out.println("zhang continue buy ticket");
}
catch(InterruptedException e) { }
}
twentyAmount=1;
fiveAmount=fiveAmount-3;
System.out.println("zhang get a ticket");
}
else if (money==10) {
while(fiveAmount==0) {
try {
System.out.println("not enough change to li");
wait();
System.out.println("li continue buy ticket");
}
catch(InterruptedException e) { }
}
fiveAmount=fiveAmount-1;
tenAmount=tenAmount+1;
change=fiveAmount*5+tenAmount*10;
System.out.println("li get a ticket");
}
else if(money==5){
fiveAmount=fiveAmount+1;
System.out.println("zhao get a ticket");
change=fiveAmount*5+tenAmount*10;
}
notifyAll();
}
}
其中几次结果:

