//控制售票过程,每张票被生产并被卖出后才可以生产下一张票
public class commuicationThread {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ticket1 t=new ticket1(20);
new productor1(t).start();
new seller1(t).start();
}
}
class ticket1
{
int size;
int number=0;
boolean available=false;
public ticket1(int size)
{this.size=size;}
public synchronized void put()
{if(available)
try {
wait();
} catch (InterruptedException e) {}
System.out.println("Producer puts ticket"+(++number));
available=true;
notify();
}
public synchronized void sell()
{ if(!available)
try {
wait();
} catch (InterruptedException e) {}
System.out.println("Consummer buys ticker"+(number));
available=false;
notify();
if(number==size)
number=size+1;
}
}
class productor1 extends Thread
{
ticket1 t=null;
public productor1(ticket1 t)
{this.t=t;}
public void run()
{while(t.number<t.size)
t.put();
}
}
class seller1 extends Thread
{
ticket1 t=null;
public seller1(ticket1 t)
{this.t=t;}
public void run()
{
while(t.number<=t.size)
{t.sell();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
}
}
}
/*
1.根据售票的两个情况为基础设计,当有票买时暂停生产,没票卖时暂停销售
2.Thread类
wait() 暂停线程在对象x上的执行并将线程放入wait池,并释放对象x 的锁旗标,等待其它进程在x对象上调用notify()或notifyAll()方法,才能获得锁旗标并继续往后执行
notify() 唤醒正在等待该对象锁旗标的第一个线程*/