//main方法测试StringBuffer与StringBuilder的线程
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
StringBuilder builder = new StringBuilder();
//遍历循环10次
for (int i = 0; i < 10; i++) {
new CustomThread(buffer, builder).start();
}
}
-------------------------------------------------------------------------------------
/**
*集成线程Thread方法
*遍历循环:给的是100
*/
public 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 < 100; 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());
}}
依据最外层遍历10次,内部遍历100次,10*100=1000
按照正常的逻辑看StringBuffer与StringBuilder的结果都应该是1000,但实际结果却不是我们想象的那样,具体运行结果如下:
StringBuffer Size:994 | StringBuilder Size:989
StringBuffer Size:994 | StringBuilder Size:989
StringBuffer Size:995 | StringBuilder Size:990
StringBuffer Size:995 | StringBuilder Size:990
StringBuffer Size:997 | StringBuilder Size:992
StringBuffer Size:997 | StringBuilder Size:992
StringBuffer Size:997 | StringBuilder Size:992
StringBuffer Size:1000 | StringBuilder Size:995
StringBuffer Size:1000 | StringBuilder Size:995
StringBuffer Size:1000 | StringBuilder Size:995
由此可以看出StringBuffer与StringBuilder的线程安全性的区别
本文通过实战对比分析,探讨了在10次外部循环和100次内部循环中,StringBuffer与StringBuilder在并发环境下的线程安全性差异,观察到非预期的结果并解析其原因。
374

被折叠的 条评论
为什么被折叠?



