2014-11-21 96 views
-4

我正在同步2个线程使用的ArrayList。通知和等待模式。通知线程但arrayList包含旧值尽管其他线程打印新值。同步ArrayList并等待

的Th1:

synchronized(pairsBarBuffers) { 

      try { 
       pairsBarBuffers.wait(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

Th2型:

synchronized (pairs15MBarBuffers) { 

     if(countSamples == 0){ 
      return; 
     } 

     updateBarBuffer(pairs15MBarBuffers , countSamples); 

     pairs15MBarBuffers.notify(); 

     countSamples = 0; 

    } 
+1

你的代码示例不作任何感。它似乎使用了两个不同的列表?请发布一个演示问题的可编译示例(请参阅http://stackoverflow.com/help/mcve)。 – 2014-11-21 12:05:49

+0

我无法发布所有的代码。基本上即时传递相同的数组(引用),只是名称在每个线程中都不相同。 – user4191784 2014-11-21 12:48:29

+0

您是否阅读过我提供的链接?如果你有,你会意识到我没有要求你所有的代码。 – 2014-11-21 14:12:27

回答

1

有两种方法来显式同步:

Using Collections.synchronizedList() method 
Using thread-safe variant of ArrayList: CopyOnWriteArrayList 

这里的a link for your reference