多线程生产与消费

来源:互联网 发布:mac os 最新的版本号 编辑:程序博客网 时间:2024/05/01 04:03
import java.util.concurrent.locks.*;  class Demo  {      private String name;      private String sex;      private boolean flag=false;      Lock lock=new ReentrantLock();      Condition condition_in=lock.newCondition();      Condition condition_out=lock.newCondition();      public void setMas(String name,String sex)      {          lock.lock();          while(flag)          {              try              {                  condition_in.await();              }              catch (InterruptedException e)              {                  e.getStackTrace();              }          }   this.name=name;              this.sex=sex;              flag=true;              condition_out.signal();   lock.unlock();      }      public void out()      {          lock.lock();          while(!flag)          {              try              {                  condition_out.await();              }              catch (InterruptedException e)              {                  e.getStackTrace();              }          }  System.out.println(this.name+"===="+this.sex);          flag=false;          condition_in.signal();      lock.unlock();      }  }  class InputDemo implements Runnable  {      private Demo d;      InputDemo(Demo d)      {          this.d=d;      }      public void run()      {          int num=0;          while (true)          {              if (num==0)              {                  d.setMas("MIKE","MAN");              }              else              {                  d.setMas("丽丽丽丽","女女女女女女");              }              num=(num+1)%2;          }      }  }  class OutputDemo implements Runnable  {      private Demo d;      OutputDemo(Demo d)      {          this.d=d;      }      public void run()      {          while (true)          {              d.out();          }      }  }  class LockDemo  {      public static void main(String[] args)      {          Demo d=new Demo();          InputDemo id=new InputDemo(d);          OutputDemo od=new OutputDemo(d);          Thread t1=new Thread(id);          Thread t2=new Thread(od);          t1.start();          t2.start();        }  }