我正在使用Java 6.
我只写了几个多线程应用程序,所以我从来没有遇到过多个线程访问同一个StringBuffer的时候.
当StringBuffer可能有用时,有人会给我一个真实世界的例子吗?
谢谢.
编辑:对不起我觉得我不够清楚.我总是使用StringBuilder,因为在我的应用程序中,一次只有一个线程访问字符串.所以我想知道什么样的场景需要多个线程同时访问StringBuffer.
我能想到的唯一现实世界的例子是,如果你的目标是Java版本的1.5.该StringBuilder班是在1.5引入了这样的旧版本,你必须使用StringBuffer替代.
在大多数其他情况下StringBuilder应该优先StringBuffer考虑性能原因 - StringBuffer很少需要提供额外的线程安全性.我想不出任何一个StringBuffer更有意义的明显情况.也许有一些,但我现在想不到一个.
事实上,即使是Java库作者也承认这StringBuffer是一个错误:
图书馆团队评估:
根据设计,StringBuffer和StringBuilder不共享公共超类型.它们不是替代品:一个是错误(StringBuffer),另一个(StringBuilder)是它的替代品.
如果StringBuilder已经添加到库中StringBuffer,则可能永远不会添加.如果您处于附加到同一字符串的多个线程似乎是个好主意的情况下,您可以通过同步访问a来轻松获得线程安全性StringBuilder.没有必要增加一个额外的课程以及它造成的所有混乱.
值得注意的是,受Java库影响很大的.NET基类库有一个StringBuilder类但没有StringBuffer,我从来没有见过有人抱怨过.
| 归档时间: |
|
| 查看次数: |
2718 次 |
| 最近记录: |