所以我前几天从我们的网络服务器上梳理了一些日志(寻找其他东西),当一些奇怪的东西引起了我的注意.
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
那么在运行测试时可能是真的,但是在构建消息时是假的.