gpt4 book ai didi

java - Android:在两个线程之间共享列表

转载 作者:行者123 更新时间:2023-12-01 22:11:47 25 4
gpt4 key购买 nike

我正在做一个应用程序,其中有两个从 SurfaceView 扩展的 View ,称为 CanvasView。

我有一个左 CanvasView 和一个右 CanvasView。这两个CanvasView都实例化了一个UIThread,它继承自Thread。CanvasView 本身像这样传递到线程中:

public void surfaceCreated(SurfaceHolder holder) {
uiThread = new UIThread(this);
uiThread.setRunning(true);
uiThread.start();
}

在每个 CanvasView 的 onDraw() 中,我都会访问列表。该列表基本上由要绘制的内容列表组成,这些内容在左右 Canvas 上基本相同。

for (CharSequence line : lineList) {
...
..
}

每当我的应用程序需要绘制 lineList 中的项目时,它就会崩溃并显示java.util.ConcurrentModificaitonException。

在两个线程之间“共享”Arraylist lineList 的正确方法是什么?

谢谢。

最佳答案

列表不是线程安全的,当多个线程尝试修改同一个列表时,最终会出现并发修改异常。

使用ConcurrentLinkedQueueCopyOnWriteArrayList

请参阅链接 - Is there a concurrent List in Java's JDK?

Collections.synchronizedList() 是另一种替代方法,它将提供对列表的同步访问。

关于java - Android:在两个线程之间共享列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com