Java StringBuilder阵列索引超出边界异常
堆栈跟踪:Java StringBuilder阵列索引超出边界异常,java,logging,stringbuilder,Java,Logging,Stringbuilder,堆栈跟踪: public class Log { private static StringBuilder log = new StringBuilder(); private static StringBuilder getLog() { return log; } public static void addToLog(String id, String name, String field, String operator, St
public class Log {
private static StringBuilder log = new StringBuilder();
private static StringBuilder getLog() {
return log;
}
public static void addToLog(String id, String name, String field, String operator, String value, String bValue) {
Calendar calendar = Calendar.getInstance();
String currentTime = formatter.format(calendar.getTime());
getLog().append(currentTime); // line 114
}
}
这种方法通常工作正常,但我们遇到了这种随机错误,我不知道为什么。有一种单独的方法可以将日志刷新到文件中,并使用以下方法清除日志:
[java] Exception in thread "Thread-5" java.lang.ArrayIndexOutOfBoundsException
[java] at java.lang.String.getChars(String.java:863)
[java] at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:416)
[java] at java.lang.StringBuilder.append(StringBuilder.java:132)
[java] at com.retroficiency.system.Log.addToMatchingLog(Log.java:114)
我不认为这是一个Java错误?是不是太长了?谢谢你的帮助 StringBuilder不是线程安全的。在这种情况下,您应该使用StringBuffer 您可以在此其他SO线程中找到更多信息:
除非您从不同的线程访问此方法,否则没有理由发生这种情况:StringBuilder不是线程安全的。您可以使用线程安全的StringBuffer或添加某种形式的同步 : 多线程使用StringBuilder实例不安全。如果需要这种同步,建议使用StringBuffer
我以为是另一回事。谢谢马上接受。
getLog().delete(0, getMatchingLog().length());