我有尝试附加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)。

10-07 19:01
查看更多