您的位置:首页 > 产品设计 > UI/UE

验证StringBuilder线程不安全

2016-07-29 21:16 417 查看

代码实现验证StringBuilder线程不安全

初级Java工程师有可能被问及,具体实现如下:

package test;

/**
* @author banjuer
* 该类用于测试StringBuilder为线程不安全的
* --思路:
*   要达到验证齐为线程不安全,应该通过多个线程调用同一个对象方法.
* --实现:
*   1.创建一个StringBuilder对象sb传入"0000011111"
*   2.多个线程同时调用sb对象的reverse
*   3.当结果出现01混合状态时,则验证了线程不安全
*/
public class SBuilderDemo{

public static void main(String[] args) {

StringBuilder sb=new StringBuilder("0000011111");

//循环创建多个线程
for(int i=0;i<100;i++){
new Thread(new MyThread(sb)).start();
}

}

//写一个线程类
//类为静态的,因为创建对象是在静态的主方法中
private static class MyThread implements Runnable{
//定义成员属性
private StringBuilder sb;
//传入参数
private MyThread(StringBuilder sb){
this.sb=sb;
}

public void run() {
//这一步循环,可以增加出现线程不安全的该路
//循环调用sb的reverse()
for(int i=0;i<100;i++){
sb.reverse();
}
//输出sb字符串(此处默认调用了toString())
System.out.println(sb);
}

}

}


实验结果如下:



相同代码StringBuffer结果如下:



源码分析:



*个人学习仅供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stringbuilder java 线程