java Thread:線程同步之互斥(1)

 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可以實現與一個鎖旗標的交互

首先判斷對象的鎖旗標是否存在,如果在就獲得鎖旗標,然後就可以執行緊隨其後的代碼段;如果對象的鎖旗標不在,就進入等待狀態,直到獲得鎖旗標

*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章