2014-11-21 95 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