A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭天龚 中级黑马   /  2013-6-2 00:44  /  1131 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭天龚 于 2013-6-15 18:25 编辑

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


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
线程安全与不安全是指的底层实现,如果有兴趣直接看源码!
回复 使用道具 举报
假设有两个线程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 一定不会出现重复的

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
如果问题已经解决,再次编辑,修改主题类型为已解决,方便大家查看
否则继续追问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马