设置并在java中使用同步工具错误

时间:2014-04-24 21:30:00

标签: java multithreading synchronization data-synchronization

我的代码中有一个错误,即程序启动时线程设置2值而不是1,程序在获取当前值之前不能设置下一个值

这是主要的课程

class DATA 
{
    private int value=0;
    Lock lock;
    Condition co;
    Boolean IstReady=false;

   public DATA()
   {
       IstReady=false;
       lock = new ReentrantLock();
       co=lock.newCondition();
        }
   public void set(int x) throws InterruptedException
   {
       lock.lock();// try
       while(IstReady==true)
           co.await();
       value=x;

       IstReady=true;
       co.signal();
       lock.unlock();
   }
  public int get() 
  {

      int ret=0;
 try{
      lock.lock();
      while(IstReady==false)
      co.await();
      ret=value;

      co.signal();

     //lock.unlock();
 }
 catch(Exception e)
 {
     System.out.println(e);
 }
 finally{
     lock.unlock();
        IstReady=false;


  }
    return ret;
}
}
        }
    }

这就是set()和get()类

class setter extends Thread
{
    DATA D;
    public setter(DATA X)
    {
        D=X;
}

    @Override
    public void run()
{
    Random T=new Random();
    while(true)
    {
        try {
            int M=T.nextInt(1000);
            System.out.println("setter set"+M);

            D.set(M);



        } catch (InterruptedException ex) {
            Logger.getLogger(setter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



    }
}


public class Newtest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

    DATA x=new DATA();
    setter s=new setter(x);
    getter g=new getter(x);
    s.start();
    g.start();

    }

}

我认为错误发生在DATA class

中的set()和get()方法中

0 个答案:

没有答案