[英]Android: Sharing lists between two threads
我正在做一個應用程序,其中有2個從SurfaceView擴展的視圖,稱為CanvasView。
我有一個左CanvasView和一個右CanvasView。 這兩個CanvasView都實例化一個UIThread,它是從Thread擴展的。 CanvasView本身像這樣傳遞到線程中:
public void surfaceCreated(SurfaceHolder holder) {
uiThread = new UIThread(this);
uiThread.setRunning(true);
uiThread.start();
}
在每個CanvasView的onDraw()中,我都訪問列表。 該列表基本上由要繪制的事物列表組成,這些事物在左右畫布上基本相同。
for (CharSequence line : lineList) {
...
..
}
每當我的應用程序需要在lineList中繪制項目時,都會崩潰,並顯示java.util.ConcurrentModificaitonException。
在兩個線程之間“共享” Arraylist lineList的正確方法是什么?
謝謝。
ArrayList
類不是線程安全的 。
使用Collections.synchronizedList()
而不是ArrayList
。
不要使用for循環的簡化版本
for (CharSequence line : lineList) {
...
..
}
而是使用傳統的。 但是,您必須自己處理數據一致性。
for (int i = 0; i < lineList.size(); i++) {
CharSequence line = lineList.get(i)
..
}
列表不是線程安全的,並且當多個線程試圖修改同一列表時,它將以並發修改異常結束。
使用ConcurrentLinkedQueue
或CopyOnWriteArrayList
。
Collections.synchronizedList()是另一個選擇,它將提供對列表的同步訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.