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

来源:互联网 发布:vba 对话框 输入数据 编辑:程序博客网 时间:2024/05/29 18:07

 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可以实现与一个锁旗标的交互

首先判断对象的锁旗标是否存在,如果在就获得锁旗标,然后就可以执行紧随其后的代码段;如果对象的锁旗标不在,就进入等待状态,直到获得锁旗标

*/