java Thread:线程同步之进程通信

//控制售票过程,每张票被生产并被卖出后才可以生产下一张票


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()  唤醒正在等待该对象锁旗标的第一个线程*/

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