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 number=0;
int size;
boolean available=false;
public ticket(int n)
{
size=n;
}
}//ticket
class productor extends Thread
{
ticket t=null;
public productor(ticket t)
{this.t=t;}
public void run()
{
while(t.number<t.size)
{
synchronized(t)
{
System.out.println("producter puts ticket"+(++t.number));
t.available=true;
}
}
System.out.println("Producer ends!");
}
}//producer
class seller extends Thread
{
ticket t=null;
int i=0;
public seller(ticket t)
{
this.t=t;
}
public void run()
{
while(i<t.size)
{
synchronized(t)
{
if(t.available&&i<=t.number)
System.out.println("seller sell ticket"+(++i));
if(i==t.number)
{
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t.available=false;
}
}
}
System.out.println("Seller ends!");
}//run
}//seller
/*學習心得
1.用多個線程處理一個對象,實現線程共享
2.關鍵字synchronized可以實現與一個鎖旗標的交互
首先判斷對象的鎖旗標是否存在,如果在就獲得鎖旗標,然後就可以執行緊隨其後的代碼段;如果對象的鎖旗標不在,就進入等待狀態,直到獲得鎖旗標
*/