zoukankan      html  css  js  c++  java
  • 证明StringBuffer线程安全,StringBuilder线程不安全

    证明StringBuffer线程安全,StringBuilder线程不安全
    证明StringBuffer线程安全StringBuilder线程不安全
    测试思想
    测试代码
    结果
    源码分析
    测试思想
    分别用1000个线程写StringBuffer和StringBuilder,
    使用CountDownLatch保证在各自1000个线程执行完之后才打印StringBuffer和StringBuilder长度,
    观察结果。
    1
    2
    3
    测试代码
    @Test
    public void testStringBuilderAndStringBuffer(){
    //证明StringBuffer线程安全,StringBuilder线程不安全
    StringBuffer stringBuffer = new StringBuffer();
    StringBuilder stringBuilder = new StringBuilder();
    CountDownLatch latch1 = new CountDownLatch(1000);
    CountDownLatch latch2 = new CountDownLatch(1000);
    for(int i=0;i<1000;i++){
    new Thread(new Runnable() {

    @Override
    public void run() {
    try {
    stringBuilder.append(1);

    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    latch1.countDown();
    }
    }
    }).start();
    }
    for(int i=0;i<1000;i++){
    new Thread(new Runnable() {

    @Override
    public void run() {

    try {
    stringBuffer.append(1);

    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    latch2.countDown();
    }

    }
    }).start();
    }
    try {
    latch1.await();
    System.out.println(stringBuilder.length());
    latch2.await();
    System.out.println(stringBuffer.length());
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    结果
    StringBuffer不论运行多少次都是1000长度。
    StringBuilder绝大多数情况长度都会小于1000。
    StringBuffer线程安全,StringBuilder线程不安全得到证明。
    1
    2
    3
    源码分析
    打开StringBuffer源码就会发现所有写操作都被synchronized修饰了,所以所有修改操作都是串行的。
    而StringBuilder的写操作则没有使用synchronized进行修饰,也不包含其他串行化修改的算法。
    ---------------------
    作者:PEACEFIRE
    来源:CSDN
    原文:https://blog.csdn.net/litterfrog/article/details/76862435
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    使用Azure CLI实现自动关闭Azure虚拟机的脚本
    Azure自动化部署服务 (1)
    证书相关知识
    Azure上七层负载均衡APP Gateway
    简谈 Java 中的泛型通配符
    表单提交后为什么要重定向?
    eclipse 误删文件的恢复,代码的恢复
    书籍列表
    Mybatis Generator最完整配置详解
    学习spring mvc
  • 原文地址:https://www.cnblogs.com/lxl57610/p/10413272.html
Copyright © 2011-2022 走看看