用两个线程模拟存票和售票过程,但要求没存入一张票,就售出一张票,售出后,再存入,直到售完为止.
package yuan;
public class App11_8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Tickets t = new Tickets(10); //新建一个票类对象t,总票数作为参数
new Producer(t).start(); //以票类对象t作为参数创建存票线程对象,并启动
new Consumer(t).start(); //以同一票类对象t为参数创建售票线程对象,并启动
}
}
class Tickets{ //票类
protected int size; //总票数
int number = 0; //票号
boolean available = false; //表示当前是否有票可售
public Tickets(int size) { //构造方法,传入总能够票数参数
this.size = size;
}
public synchronized void put() { //同步方法,实现存票功能
if(available) //如果还有存票代售,则存票线程等待
try {wait();}
catch(Exception e) {}
System.out.println(“存入第[”+(++number)+"]号票");
available = true;
notify(); //存票后唤醒售票线程开始售票
}
public synchronized void sell() { //同步方法,实现售票功能
if(!available) //如