Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全

原创 2017年01月03日 17:21:00

本文内容大多基于官方文档和网上前辈经验总结,经过个人实践加以整理积累,仅供参考。


首先需要明白什么是线程安全,什么是非线程安全,引用百度百科
这里写图片描述

关于 Java 中 String,StringBuffer 和 StringBuilder 的区别,参看:
Java:String,StringBuilder,StringBuffer 区别

下面用代码进行验证:
1 定义一个线程类,循环执行 StringBuffer 和 StringBuilder 的 append 方法,执行一次线程休眠 10 毫秒

class CustomThread extends Thread {
    private StringBuffer buffer;
    private StringBuilder builder;

    public CustomThread(StringBuffer buffer, StringBuilder builder) {
        this.buffer = buffer;
        this.builder = builder;
    }

    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            buffer.append("A");
            builder.append("Z");
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("StringBuffer Size:" + buffer.length() 
            + " | "
            + "StringBuilder Size:" + builder.length());
    }
}

2 定义测试方法,循环新建 10 个线程类并调用 start 方法

public static void main(String[] args) {
    StringBuffer buffer = new StringBuffer();
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < 10; i++) {
        new CustomThread(buffer, builder).start();
    }
}

3 测试结果,10个线程,每个线程循环1000次,如果线程安全则全部执行完成后字符串长度应该都是 10 * 1000 = 10000,测试结果中显示 StringBuffer 最终长度的确是 10000,StringBuilder 最大长度只有9956,说明 StringBuilder 非线程安全
这里写图片描述

版权声明: 举报

相关文章推荐

StringBuffer与StringBuilder的线程安全性验证

对于国内面试中经常问“StringBuffer和StringBuilder有何区别”,知乎上曾有一番讨论。 我以为,好的面试官可以在这个问题上直接进一步,“你不知道这两个的区别没关系,我可以告诉你,...

字符拼接StringBuilder速度快,但StringBuilder是线程不安全的。(StringBuffer是线程安全的,给buffer加锁)

谢谢博主,转载于https://www.oschina.net/question/129471_37356 序言 StringBuffer与StringBuilder是java.lang包下被大...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Java:String,StringBuilder,StringBuffer 区别

Java:String,StringBuilder,StringBuffer 区别

Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全

Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全

证明StringBuffer线程安全,StringBuilder线程不安全

证明StringBuffer线程安全,StringBuilder线程不安全证明StringBuffer线程安全StringBuilder线程不安全 不多说直接列代码 解释 结果 源码分析不多说直接列代...

验证java的StringBuffer是线程安全而StringBuilder是线程不安全的

这两天在看java,看到了StringBuffer是线程安全而StringBuilder是线程不安全的然后查了一下写了个小程序验证了下,想把程序留下来以后看但觉得自己电脑上存着没多久就删了所以就突发奇...

StringBuilder与StringBuffer的区别(转)

public synchronized StringBuffer append(String str) { super.append(str); return this; } publ...

StringBuffer和StringBuilder的区别

无论是做Java或是Android,都避免不了遇到这个问题,其实kai

StringBuilder与StringBuffer的区别(转)

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类。St...

StringBuilder与StringBuffer的区别(转)

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类。St...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)