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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 习惯就好 于 2015-3-3 11:51 编辑

老师在讲StringBuffer时提到StringBuilder,说以后建议使用StringBuilder
原因有三:1、提高效率
                  2、简化书写
                  3、提高安全性????
再次我就有点不解:StringBuffer是同步的,是安全的,而StringBuilder是不同步,应该是不安全的呀!那为什么说使用StringBuilder
会提高安全性呢?难道就因为他是单线程吗?那如果真是单线程还有安全锁得得问题吗?此时怎么提高安全性呢?
   以上问题是我的小疑惑,请大神们帮忙解答一下,谢谢!

5 个回复

倒序浏览
例子:你觉得哪个好
  1. synchronized//判断锁
  2.              {
  3.                      ...
  4.                  StringBuffer sb1//判断锁
  5.                  ...
  6.                  StringBuffer sb2//判断锁
  7.                  ...
  8.                  StringBuffer sbn//判断锁
  9.              }
  10.              synchronized//判断锁
  11.              {
  12.                      ...
  13.                  StringBuilder sb1
  14.                  ...
  15.                  StringBuilder sb2
  16.                  ...
  17.                  StringBuilder sbn
  18.              }
复制代码
回复 使用道具 举报
z47057554 发表于 2015-3-3 10:10
例子:你觉得哪个好

你这是用同步,是在多线程操作时用到,如果是操作多线程就不用再去写同步代码块了,因为StringBuffer本身就是同步的。
回复 使用道具 举报
本帖最后由 z47057554 于 2015-3-3 11:33 编辑
  1. public void run()
  2. (
  3.                   代码
  4.                   。。。
  5.                   代码
  6. //以下为你要在多线程中同步的代码
  7. synchronized//判断锁1,此锁能保证代码块中同步,同一时间只能有一个线程进入执行
  8.              {
  9.    
  10.                   代码
  11.                   。。。
  12.                   代码
  13.                  StringBuffer sb1//判断锁2,此锁只能保证sb1不会被并发操作,有锁1还,它没用,每次执行时却需要判断
  14.    
  15.                   代码
  16.                   。。。
  17.                   代码
  18.                  StringBuffer sb2//判断锁3,此锁只能保证sb2不会被并发操作,有锁1还,它没用,每次执行时却需要判断
  19.                
  20.                   代码
  21.                   。。。
  22.                   代码
  23.                  StringBuffer sbn//判断锁n,此锁只能保证sbn不会被并发操作,有锁1还,它没用,每次执行时却需要判断
  24.              }
  25. //代码中要创建n+1个锁,代码运行每到一个锁会判断一次,以上表示会判断n+1次
  26. }
  27. *********************************************************************
  28. //此代码只需一把锁,执行时只需判断一次
  29.              synchronized//判断锁
  30.              {
  31.                      ...
  32.                  StringBuilder sb1
  33.                  ...
  34.                  StringBuilder sb2
  35.                  ...
  36.                  StringBuilder sbn
  37.              }
复制代码
这里,StringBuffer没比Stringbuilder安全,但用StringBuffer会使效率下降

回复 使用道具 举报
StringBuffer升级到StringBuilder主要是因为提高了效率,并不是因为增强安全性或者简化书写。
你这里说的三点是jdk每次升级所考虑的三个主要因素,显然这里只是为了提高效率。
回复 使用道具 举报
huangchunwei 来自手机 中级黑马 2015-3-5 08:18:31
地板
你理解错了吧,毕老师说的是升级的时候要考虑的三点因素,并不是说StringBuilder的三个原因。之所以升级StringBuilder的原因在于提高了效率。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马