簡體   English   中英

Android:在兩個線程之間共享列表

[英]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)
    ..
}

列表不是線程安全的,並且當多個線程試圖修改同一列表時,它將以並發修改異常結束。

使用ConcurrentLinkedQueueCopyOnWriteArrayList

參考鏈接-Java的JDK中是否有並發列表?

Collections.synchronizedList()是另一個選擇,它將提供對列表的同步訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM