黑马程序员技术交流社区
标题:
关于StringBuffer与StringBuilder的小疑惑
[打印本页]
作者:
习惯就好
时间:
2015-3-3 09:43
标题:
关于StringBuffer与StringBuilder的小疑惑
本帖最后由 习惯就好 于 2015-3-3 11:51 编辑
老师在讲StringBuffer时提到StringBuilder,说以后建议使用StringBuilder
原因有三:1、提高效率
2、简化书写
3、提高安全性????
再次我就有点不解:StringBuffer是同步的,是安全的,而StringBuilder是不同步,应该是不安全的呀!那为什么说使用StringBuilder
会提高安全性呢?难道就因为他是单线程吗?那如果真是单线程还有安全锁得得问题吗?此时怎么提高安全性呢?
以上问题是我的小疑惑,请大神们帮忙解答一下,谢谢!
作者:
z47057554
时间:
2015-3-3 10:10
例子:你觉得哪个好
synchronized//判断锁
{
...
StringBuffer sb1//判断锁
...
StringBuffer sb2//判断锁
...
StringBuffer sbn//判断锁
}
synchronized//判断锁
{
...
StringBuilder sb1
...
StringBuilder sb2
...
StringBuilder sbn
}
复制代码
作者:
习惯就好
时间:
2015-3-3 10:24
z47057554 发表于 2015-3-3 10:10
例子:你觉得哪个好
你这是用同步,是在多线程操作时用到,如果是操作多线程就不用再去写同步代码块了,因为StringBuffer本身就是同步的。
作者:
z47057554
时间:
2015-3-3 11:19
本帖最后由 z47057554 于 2015-3-3 11:33 编辑
public void run()
(
代码
。。。
代码
//以下为你要在多线程中同步的代码
synchronized//判断锁1,此锁能保证代码块中同步,同一时间只能有一个线程进入执行
{
代码
。。。
代码
StringBuffer sb1//判断锁2,此锁只能保证sb1不会被并发操作,有锁1还,它没用,每次执行时却需要判断
代码
。。。
代码
StringBuffer sb2//判断锁3,此锁只能保证sb2不会被并发操作,有锁1还,它没用,每次执行时却需要判断
代码
。。。
代码
StringBuffer sbn//判断锁n,此锁只能保证sbn不会被并发操作,有锁1还,它没用,每次执行时却需要判断
}
//代码中要创建n+1个锁,代码运行每到一个锁会判断一次,以上表示会判断n+1次
}
*********************************************************************
//此代码只需一把锁,执行时只需判断一次
synchronized//判断锁
{
...
StringBuilder sb1
...
StringBuilder sb2
...
StringBuilder sbn
}
复制代码
这里,StringBuffer没比Stringbuilder安全,但用StringBuffer会使效率下降
作者:
zfgrinm
时间:
2015-3-3 12:05
StringBuffer升级到StringBuilder主要是因为提高了效率,并不是因为增强安全性或者简化书写。
你这里说的三点是jdk每次升级所考虑的三个主要因素,显然这里只是为了提高效率。
作者:
huangchunwei
时间:
2015-3-5 08:18
你理解错了吧,毕老师说的是升级的时候要考虑的三点因素,并不是说StringBuilder的三个原因。之所以升级StringBuilder的原因在于提高了效率。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2