//将互斥方法放入Tickets类中
public class synchThread {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ticket t=new ticket(20);
new productor(t).start();
new seller(t).start();
}
}
class ticket
{ int i=0;
int size;
int number=0;
boolean available=false;
public ticket(int size)
{this.size=size;}
public synchronized void put()
{
System.out.println("Producer puts ticket"+(++number));
available=true;
}
public synchronized void sell()
{
System.out.println("Consummer buys ticker"+(++i));
if(i==size)
available=false;
}
}
class productor extends Thread
{
ticket t=null;
public productor(ticket t)
{this.t=t;}
public void run()
{while(t.number<t.size)
t.put();
try {
Thread.sleep(3);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
}
class seller extends Thread
{
ticket t=null;
public seller(ticket t)
{this.t=t;}
public void run()
{while(t.available)
t.sell();}
}
/*学习心得
1.同步方法使用的锁旗标关联对象正是synchronized方法所属的实例对象
2.设置适当的sleeptime有助观察线程同步的过程*/