为什么StringBuilder是线程不安全的而StringBuffer是线程安全的

本文探讨了StringBuilder线程不安全的原因,通过案例分析了其在多线程环境下可能出现的问题,如长度计算错误和ArrayIndexOutOfBoundsException异常。相比之下,StringBuffer通过在关键方法上添加锁确保了线程安全性。在Java9中,StringBuffer进行了改进,以更节省空间。
摘要由CSDN通过智能技术生成

为什么StringBuilder是线程不安全的

1、案例测试
通过一个案例看一下效果,执行方法如下:

public static void testBuilder() {
   
	StringBuilder builder = new StringBuilder();
	for(int i = 0; i < 10; i++) {
   
		 new Thread(new Runnable() {
   
	            @Override
	            public void run() {
   
	            	for(int j = 0; j < 1000; j++) {
   		            		
	            		builder.append("a");
	            	}
	            }
	        }).start();
	}
	try {
   
		Thread.sleep(100);
	} catch (InterruptedException e) {
   
		e.printStackTrace();
	}
	System.out.print("线程不安全:"+builder.length());
}

这个方法需求是创建10个线程,每个线程内执行1000次循环,在循环内拼接字符串a,然后再睡100毫秒,最后打印出拼接结果的长度,按正常的输出思路

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ruiurrui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值