代码如下:
public class BuyTicketMain {
public static void main(String args[ ]) {
TicketHouse officer = new TicketHouse();
Thread zhangfei,likui,wangwu;
zhangfei = new Thread(officer);
zhangfei.setName("张飞");
likui = new Thread(officer);
likui.setName("李逵");
wangwu =new Thread(officer);
wangwu.setName("王五");
wangwu.start();
zhangfei.start();
likui.start();
}
}
代码2:import java.util.Scanner;
public class TicketHouse implements Runnable {
int fiveAmount=2,tenAmount=0,twentyAmount=0,n=0;
public synchronized void run() {
/* if(Thread.currentThread().getName().equals("张飞")) {
saleTicket(20);
}
else if(Thread.currentThread().getName().equals("李逵")) {
saleTicket(5);
}*/
System.out.println(Thread.currentThread().getName()+"买票"+Thread.currentThread().getName()+"有多少钱?(输入金额,只能为5,20)");
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
saleTicket(n);
}
private synchronized void saleTicket(int money) {
if(money==5) { //如果使用该方法的线程传递的参数是5,就不用等待
fiveAmount=fiveAmount+1;
System.out.println( "给"+Thread.currentThread().getName()+"入场卷,"+
Thread.currentThread().getName()+"的钱正好");
}
else if(money==20) {
while(fiveAmount<3) {
try { System.out.println("\n"+Thread.currentThread().getName()+"靠边等...");
wait(); //如果使用该方法的线程传递的参数是20须等待
//Thread.sleep(1000);
System.out.println("\n"+Thread.currentThread().getName()+"继续买票");
}
catch(InterruptedException e){}
}
fiveAmount=fiveAmount-3;
twentyAmount=twentyAmount+1;
System.out.println("给"+Thread.currentThread().getName()+"入场卷,"+
Thread.currentThread().getName()+"给20,找赎15元");
}
notifyAll();
}
}
下图中张飞不应该在王五之后就可以买票吗?为什么要等李逵买了之后才能继续买票?求大神指点