首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuilder ArrayIndexOutOfBoundsException

StringBuilder ArrayIndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2012-10-12 01:53:39
回答 2查看 3.1K关注 0票数 0
代码语言:javascript
复制
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

    }

}

堆栈跟踪:

代码语言:javascript
复制
[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)

这种方法通常工作得很好,但我们遇到了这个随机错误,我不知道为什么。有一个单独的方法,它将日志刷新到一个文件中,并使用以下命令清除它:

代码语言:javascript
复制
getLog().delete(0, getMatchingLog().length());

我不认为这是一个Java bug?是不是太长了?谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 01:55:38

StringBuilder不是线程安全的。在这种情况下,您应该使用StringBuffer。

你可以在另一个SO线程中找到更多信息:

Difference between StringBuilder and StringBuffer

票数 10
EN

Stack Overflow用户

发布于 2012-10-12 01:56:05

没有理由会发生这种情况,除非您从不同的线程访问此方法:StringBuilder不是线程安全的。您可以使用StringBuffer,它是线程安全的,或者添加某种形式的同步。

Javadoc

多线程使用StringBuilder的

实例是不安全的。如果需要这样的同步,则建议使用StringBuffer。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12845634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档