StringBuilder 和 StringBuffer 关于线程安全的问题

StringBuilder 线 程不安全,因为源码中的 count += len不是原子操作

    public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }

StringBuffer线程安全,因为append方法加锁了

    public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

成员变量需要考虑多线程安全问题。局部变量无需考虑,使用StringBuilder即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注