我有尝试附加2个SttringBuffers的代码:
logBuf.append(errStrBuf);
在日志中,我看到以下跟踪:
java.lang.StringIndexOutOfBoundsException: String index out of range: 90
at java.lang.AbstractStringBuilder.getChars(AbstractStringBuilder.java:325)
at java.lang.StringBuffer.getChars(StringBuffer.java:201)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:404)
at java.lang.StringBuffer.append(StringBuffer.java:253)
我无法理解问题的原因。
您可以提供带有常量的示例吗?
可以和并发关联吗?
您可以提出解决方案吗?
最佳答案
是的,它可能与并发有关。按照doc:
因此,如果在此过程中更改了errStrBuf
,则可能会产生此错误。自己同步它,如下所示:
synchronize (errStrBuf) {
logBuf.append(errStrBuf);
}
无论
errStrBuf
何时更改,都使用相同的同步块(synchronized block)。