gpt4 book ai didi

java - 如何修复致命异常 : java. lang.IndexOutOfBoundsException 索引 : 0, 大小:1

转载 作者:行者123 更新时间:2023-12-02 13:10:44 26 4
gpt4 key购买 nike

Kotlin 程序 fragment :

fun peek() = if (!elements.isEmpty() && elements.size > 0) elements[0] else null

效果很好,但有时我会收到 firebase 崩溃报告:

Fatal Exception: java.lang.IndexOutOfBoundsException Index: 0, Size: 1java.util.ArrayList.get (ArrayList.java:437)bigmick.ghu.util.Queue.peek (Queue.kt:17)

对我来说这听起来很疯狂:列表的大小为 1,而且第一个(现有的)元素可以通过 index=0 引用。

据我所知,它应该可以工作。但有时它不会。

最佳答案

ArrayList 类不是线程安全的。当一个线程在另一个线程调用您的方法的同时进行更改时,可能会发生意想不到且看似不可能的事情。

一个可能的修复是让两个线程不可能同时调用列表的方法(“互斥”)。这很容易通过 Collections.synchronizedList 实现

elements = Collections.synchronizedList(new ArrayList<>())

如果您从列表中读取的元素比写入的要多得多,另一种方法是使用 CopyOnWriteArrayList而不是 ArrayList

我看到您正在使用名为队列的类中的这段代码。在那种情况下,您可能希望使用实际的队列数据结构而不是列表,并且标准库有许多选项可供您选择,具体取决于您想要的行为。例如,请参阅此问题 Choosing the best concurrency list in Java

关于java - 如何修复致命异常 : java. lang.IndexOutOfBoundsException 索引 : 0, 大小:1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63338223/

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