java StringBuffer在线程安全程序的设计中究竟是如何工作的?
许多人提到了Java中StringBuffer和StringBuilder之间的区别。StringBuffer包含同步方法。人们常说“如果一个缓冲区被多个线程使用,那么就使用StringBuffer。”但是使用StringBuffer真的能保证“线程安全”吗
你可以在下面搜索框中键入要查询的问题!
许多人提到了Java中StringBuffer和StringBuilder之间的区别。StringBuffer包含同步方法。人们常说“如果一个缓冲区被多个线程使用,那么就使用StringBuffer。”但是使用StringBuffer真的能保证“线程安全”吗
# 1 楼答案
嗯,我认为强调StringBuffer的一些实际用途是很重要的。为此,我设计了一个简单的程序来说明StringBuffer在实现线程安全方面如何优于StringBuilder
然而,正如许多其他人也指出的那样,StringBuffer并不是设计线程安全应用程序的灵丹妙药更进一步,我要说的是,用于并发的工具和库(例如Vector)应该得到很好的理解和适当的实现,我们不应该简单地假设使用“线程安全”库
http://jeremymanson.blogspot.sg/2008/08/dont-use-stringbuffer.html
杰里米的例子说明了这一点,我引用:
当然,它是“线程安全的”,即不存在数据竞争(基本上是没有足够同步的并发访问)。但是您不知道线程3将打印什么:“ab”或“ba”“。我必须引入更多的同步,使其产生合理的结果。StringBuffer附带的锁没有任何帮助。”
我希望这对你是有见地的