簡體   English   中英

IndexOutOfBoundsException:索引:15,大小:19

[英]IndexOutOfBoundsException: Index: 15, Size: 19

所以前幾天我正在從我們的網絡服務器中梳理一些日志(尋找其他東西),這時一些奇怪的東西引起了我的注意。

java.lang.IndexOutOfBoundsException: Index: 15, Size: 19
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)

這對我來說似乎是不可能的。

我查找了ArrayList#rangeCheck的源代碼,這讓我大吃一驚

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

根據我收到的消息,本不應該發生。

不幸的是,我不知道此時的內容到底是什么(這是從用於很多事情的代碼中調用的)。 而且我一直無法重現它。 我什至不知道我從哪里開始。

問題是:這應該能夠發生嗎? 這是Java中的一個小故障嗎? 或者只是一場奇怪的事故。

我知道這可能是題外話。 我希望我有更多關於發生的事情的信息,但我沒有。

ArrayList 不是多線程安全的。 如果它在大約被另一個線程訪問時被一個線程修改,則在運行測試時index >= size可能為真,但在構建消息時為假。

這應該能夠發生嗎? 這是Java中的一個小故障嗎? 或者只是一場奇怪的事故。

以上全部。

讓我們想象一下您在一個線程中添加到 ArrayList 並在另一個線程中訪問它。

假設您的大小為 14,但您訪問索引為 15

T1: if (index >= size) // is true
T2: for(int i=0;i<5;i++) list.add(N); // so now we have 19.
T1: outOfBoundsMsg(index); // Index: 15, Size: 19

暫無
暫無

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

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