黑马程序员技术交流社区

标题: 关于StringBuffer和StringBuilder的问题 [打印本页]

作者: 郭天龚    时间: 2013-6-2 00:44
标题: 关于StringBuffer和StringBuilder的问题
本帖最后由 郭天龚 于 2013-6-15 18:25 编辑

    在学到StringBuffer和StringBuilder这连个类的时候,java的API文档介绍说:
StringBuffer是线程安全的可变字符序列而Stringbuilder的实例用于多线程是不安全的。
    哪位大侠能结合多线程讲解一下这两个类多线程安全问题吗?



作者: mvplee    时间: 2013-6-2 00:53
线程安全与不安全是指的底层实现,如果有兴趣直接看源码!
作者: Super_Class    时间: 2013-6-2 08:26
假设有两个线程Thread-0和Thread-1同时操作对象StringBuilder。
//线程任务类
class SBTask implements Runnable{
static final StringBuilder sb = new StringBuilder();

//为了方便理解,加入了一个可变参数
int tmp = 1;
//实现run方法
public void run(){
sb.append(count++);
}
}

SBTask st = new SBTask();
Thread t0 = new Thread(st);
Thread t1 = new Thread(st);


假设t0进入任务,操作完成后,sb 变成了1

然后还是t0 执行,当t0进入线程任务后,t1也进来了。

这个时候可能t0就让出了执行权,交给了t1,t1执行后,sb变成了12

又将执行权交给了t0,t0接着之前的位置执行,t0执行完就变成122. //这里就出现了线程问题


用StringBuffer 一定不会出现重复的
作者: 曹睿翔    时间: 2013-6-2 10:32
如果问题已经解决,再次编辑,修改主题类型为已解决,方便大家查看
否则继续追问




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2