用StringBuilder的append方法時(shí),會(huì)出現(xiàn)掛掉的情況,是多線程導(dǎo)致的,報(bào)錯(cuò)信息如下
AndroidRuntime: FATAL EXCEPTION: Thread-10
AndroidRuntime: Process: com.xxxxx, PID: 4010
AndroidRuntime: java.lang.ArrayIndexOutOfBoundsException: dstBegin > dst.length. dstBegin=294965, dst.length=294910
AndroidRuntime: at java.lang.String.getChars(String.java:802)
AndroidRuntime: at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:452)
AndroidRuntime: at java.lang.StringBuilder.append(StringBuilder.java:137)
AndroidRuntime: at com.android.tools.analysis.speedtest.guangdong.ui.FragmentStartReady$onViewCreated$4$1.invoke(FragmentStartReady.kt:130)
AndroidRuntime: at com.android.tools.analysis.speedtest.guangdong.ui.FragmentStartReady$onViewCreated$4$1.invoke(FragmentStartReady.kt:39)
AndroidRuntime: at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
復(fù)現(xiàn)代碼如下
val sb = StringBuilder()
for (i in 0 until 10) {
thread {
for (i1 in 0 until 10000) {
sb.append("some string")
}
}
}
解決辦法是使用StringBuffer
參考java - What actual cause the StringBuilder fails in multi threading environment - Stack Overflow