在a和b当中,在
synchronized(Data) {
   Data.get();
   Data.set();
   ...
}这样就不会冲突了

解决方案 »

  1.   

    你最好将要进行同步的语句进行同步,不要对整个函数进行同步
    synthronized(object){
         同步语句
    }
      

  2.   

    我就是在两个线程中分别调用
    synchronized(Data) {
       Data.get();
       Data.set();
       ...
    }
    但是好象没效果
      

  3.   

    下面是测试代码例子:
    Data对象的一个方法:
    public void outText(boolean threadA)
        {
            if(threadA)
            {
                try
                {
                    System.out.print("Thread A start wait\n");
                    wait(3000);
                    System.out.print("Thread A wait Stop\n");
                }
                catch(Exception e)
                {
                    System.out.print("Wait Exception "+ e.getMessage());
                }
            }
            else
            {
                try
                {
                    System.out.print("Thread B start wait\n");
                    wait(3000);
                    System.out.print("Thread B wait Stop\n");
                }
                catch(Exception e)
                {
                    System.out.print("Wait Exception "+ e.getMessage());
                }
            }
            
        }
    线程A的调用代码:
    for(int i=0; i<2;i++)
            {
                synchronized(lockData)
                {
               lockData.outText(true);
                }
            }线程B的调用代码:
    for(int i=0; i<2; i++)
            {
            synchronized(tt.lockData)
            {
                tt.lockData.outText(false);
            }
            }运行后的输出结果:
    Thread A start wait
    Thread B start wait
    Thread A wait Stop
    Thread A start wait
    Thread B wait Stop
    Thread B start wait
    Thread A wait Stop
    Thread B wait Stop其中tt.lockData和lockData是同一个对象。从结果可以看出,在A线程还没Stop wait的时候,B线程也进入到了这个方法中,说明Data对象的outText方法两个线程可以同事访问。
    请问是怎么原因?
      

  4.   

    应该将Data.get()和Data.set()俩个方法作为同步方法,即用synchronized修饰.
      

  5.   

    分别对线程A和B 进行synchronized()
    A的get()和set()方法同步完成之后,在对B线程操作get()和set()
    这样应该可以了吧  
    不知道说的对不对啊  见谅....
      

  6.   

    当线程A调用了wait()方法后,他会释放对lockData的锁,并且同时线程A被挂起.这时其他线程是可以访问lockData的.