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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王鹏伟 中级黑马   /  2013-2-27 20:30  /  2215 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

StringBuffer线程同步,StringBuilder不同步,怎么体现出来线程同步的?具体什么情况区别使用这两个?

14 个回复

倒序浏览
StringBuffer应该里面有同步代码块吧
所以效率偏低
回复 使用道具 举报
StringBuffer类:是可变的,当一个StringBuffer被创建了以后,通过它的方法改变这个字符串
    对象的字符序列。一旦生成了最终的字符串,就可以调用toString()方法将其
    转换为一个String对象。
StringBuilder类:是JDK1.5以后出来的,跟StringBuffer基本相似。只是StringBuffer是线程
     安全的,StringBuilder性能略高(线程同步的话需要判断对象锁,所以效率会低。)如果要创建一个内容可变的字符串对象,
     就用它。


单线程下,两者的效率是一样的.
线程安全指的就是:在一个被用synchronized锁住的对象中,程序的某个线程执行到该对象的一个同步方法时,在这个线程执行完之前,其他的线程都无法执行到该对象的用synchronized修饰的任何方法.这就是所谓的线程安全了.

这再没技术分就不应该了吧。。。。。。。已经好久没加了


回复 使用道具 举报
StringBuffer每次读写的时候都需要判断锁.以免其他线程都一起写同一种东西, 而StringBuilder是不同步的.相比于StringBuffer效率更高. 如果是多线程推荐用StringBuffer.就不需要自己去加锁. 单列就用StringBuilder..
回复 使用道具 举报
StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。
如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;
当然,如果要保证线程安全,自然非StringBuffer莫属了。
除了对多线程的支持不一样外,这两个类的使用几乎没有任何差别。
回复 使用道具 举报
张文彬 发表于 2013-2-27 20:37
StringBuffer类:是可变的,当一个StringBuffer被创建了以后,通过它的方法改变这个字符串
    对象的字符 ...

版主们都很忙,我目测现在没满25分的,你看第一页,有几个帖子评过分.我看在新版开出以前,是木有希望满25.除非你找了几个牛叉的问题,或是解决了牛叉的问题,让人膜拜...
回复 使用道具 举报
Gaara 高级黑马 2013-2-27 20:58:04
7#
陈圳 发表于 2013-2-27 20:52
版主们都很忙,我目测现在没满25分的,你看第一页,有几个帖子评过分.我看在新版开出以前,是木有希望满25.除 ...

其实版主们都挺不错的 呵呵 我很理解他们啊 都很认真负责 只是对自己技术分有些担忧啊  增加点得分概率呵呵
回复 使用道具 举报
黄玉昆 黑马帝 2013-2-27 20:59:03
8#
StingBuilder是比StringBuffer更新的,以后开发使用StringBilder就没错的,效率比较高,但是由于线程不同步,需要自己加锁的,使用Lock就可以了,可以自己加锁和解锁的。
回复 使用道具 举报
陈圳 高级黑马 2013-2-27 21:06:32
9#
张文彬 发表于 2013-2-27 20:58
其实版主们都挺不错的 呵呵 我很理解他们啊 都很认真负责 只是对自己技术分有些担忧啊  增加点得分概率呵 ...

版主们辛苦,这个大家都知道的,毕竟和我们一样,都学同样的,朝一个方向奋斗,还得管理着这个版面.我看你是比较痛苦...都混了99个小时了.还少3分...我给你一个方法.你提三个问题,要有建设性的.然后呢,等24小时后,直接呼版主.帖子一定要有建设性,要给人一种技术含量较高的感觉啊.这样你就过关了.我就这几天专抢技术分,最多时一天得了10分.年一过,再加上17期要开了,就少了...一天才一俩分.
回复 使用道具 举报
Gaara 高级黑马 2013-2-27 21:10:17
10#
陈圳 发表于 2013-2-27 21:06
版主们辛苦,这个大家都知道的,毕竟和我们一样,都学同样的,朝一个方向奋斗,还得管理着这个版面.我看你是比 ...

好吧  我努力吧。。。。
回复 使用道具 举报
陈圳 发表于 2013-2-27 20:52
版主们都很忙,我目测现在没满25分的,你看第一页,有几个帖子评过分.我看在新版开出以前,是木有希望满25.除 ...

我的技术分够了,昨天24分踩了涛哥的一个沙发,顿时金佛滴泪,技术+1 就砸我头上了。。。
回复 使用道具 举报
贾文泽 发表于 2013-2-27 21:27
我的技术分够了,昨天24分踩了涛哥的一个沙发,顿时金佛滴泪,技术+1 就砸我头上了。。。 ...

你看你真没出息...咋这技术分到了你这就变成佛爷的眼泪呢?不过你这即使技术分满了?能上17期么?
回复 使用道具 举报
陈圳 发表于 2013-2-27 21:46
你看你真没出息...咋这技术分到了你这就变成佛爷的眼泪呢?不过你这即使技术分满了?能上17期么? ...

我计划中的就是18期,学校还有事情要处理,一切皆在掌握之中:lol
回复 使用道具 举报
  
下面是我查看API文档理解的示图:
下面几句话是根据API文档说明的个人理解:
1、  线程安全的可变字符序列(缓冲区里面的东西)
因为这个字符串序列是通过StringBuffer,象来操作,而这个对象对缓冲区中内容操作是同步代码方式;可变,大概是说可以对缓冲区序列内容进行修改;
2、  一个类似于的字符串缓冲区,但不能修改:
这里无法理解了,一会说行,一会说不行,请高手明示。
3、  虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容:
这一句大概是指oppend这些方法吧。
另外:不管是单线程操作,还是多线程操作,StringBuilder的效率要高:因为不管是在单线和或多线程中,StringBuffer都要做线程安全操作这一步内容

StringBuffer.png (12.18 KB, 下载次数: 55)

StringBuffer.png
回复 使用道具 举报
Gaara 高级黑马 2013-2-28 11:58:26
15#
贾文泽 发表于 2013-2-27 22:01
我计划中的就是18期,学校还有事情要处理,一切皆在掌握之中

其实我的计划也是18期。。。。。。只不过一直不加  觉得有点不对啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马