StringBuilder和StringBuffer的区别
来源:互联网 发布:python iter 编辑:程序博客网 时间:2024/05/20 17:25
StringBuilder非线程安全,StringBuffer线程安全。
证明如下:
证明如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class StringBuilderAndBufferTest implements Runnable{
static StringBuilder builder = new StringBuilder();
static StringBuffer buffer=new StringBuffer();
public void run() { try { Thread.sleep((int)(Math.random() * 2)); } catch (InterruptedException e) { e.printStackTrace(); } builder.append("1"); buffer.append("1");}public static void main(String[] args) throws InterruptedException { ExecutorService pool = Executors.newFixedThreadPool(50); for (int i = 0; i < 30000; i++) { pool.execute(new StringBuilderAndBufferTest()); } Thread.sleep(3000); // 如果长度为30000就是安全的 System.out.println("StringBuilder长度==="+builder.length()); System.out.println("StringBuffer长度==="+buffer.length());}
}
结果如下:
StringBuilder长度===29536
StringBuffer长度===30000
查看二者append()方法的区别
public StringBuilder append(String str) { super.append(str); return this;}
public synchronized StringBuffer append(String str) { super.append(str); return this;}
public AbstractStringBuilder append(String str) { if (str == null) str = "null"; int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this;}
二者底层都是调用父类AbstractStringBuilder的append(String str),区别在于StringBuffer的append方法有synchronized关键字。synchronized关键字表示该方法一次只能有一个线程进入,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入
故可知:
StringBuilder是非线程安全的,效率更高;
StringBuffer是线程安全的,效率不如StringBuilder。
0 0
- stringbuffer 和stringbuilder的区别
- Stringbuffer和StringBuilder的区别
- StringBuffer 和 StringBuilder 的区别
- StringBuffer和StringBuilder的区别
- StringBuilder和StringBuffer的区别
- StringBuilder和StringBuffer的区别
- StringBuffer 和 StringBuilder 的区别
- stringBuffer和stringBuilder的区别
- StringBuffer和Stringbuilder的区别
- StringBuilder和StringBuffer的区别
- StringBuffer和StringBuilder的区别
- StringBuilder和StringBuffer的区别
- StringBuffer和StringBuilder的区别
- StringBuffer 和 StringBuilder的区别
- StringBuffer和StringBuilder的区别
- StringBuilder和StringBuffer的区别
- StringBuffer和StringBuilder的区别
- StringBuffer和StringBuilder的区别
- 蓝桥杯-第七届省赛javaA组-生日蜡烛
- Burp Suite如何设置代理
- 知乎上的48条神回复
- Leetcode-436. Find Right Interval
- Gradle安装
- StringBuilder和StringBuffer的区别
- Android端APM解决方案
- VTK修炼之道64:纹理映射体绘制_三维纹理映射
- 安卓打包混淆报错:can't find superclass or interface各种警告找不到
- 跟天齐老师学Spark(8)--Spark RDD综合练习
- 蓝桥杯-第七届省赛javaA组-搭积木
- Node.js读取文件
- HDU2052(水题)Picture
- 主板上常见的接口信号定义与分类详解