MAN*_*HAK 16 java stringbuilder multithreading synchronization stringbuffer
假设我们的应用程序只有一个线程.我们正在使用StringBuffer那么问题是什么?
我的意思是如果StringBuffer可以通过同步处理多个线程,使用单线程有什么问题?
为什么要用StringBuilder呢?
sgo*_*les 27
StringBuffers是线程安全的,这意味着它们具有控制访问的同步方法,因此一次只有一个线程可以访问StringBuffer对象的同步代码.因此,StringBuffer对象通常可以安全地在多线程环境中使用,其中多个线程可能试图同时访问同一个StringBuffer对象.
StringBuilder's访问不同步,因此它不是线程安全的.通过不同步,StringBuilder的性能可以比StringBuffer更好.因此,如果您在单线程环境中工作,则使用StringBuilder而不是StringBuffer可能会提高性能.对于其他情况也是如此,例如StringBuilder局部变量(即方法中的变量),其中只有一个线程将访问StringBuilder对象.
所以,更喜欢StringBuilder因为,
看一下这个 :
StringBuilder应该更快(微小),因为它不同步(线程安全).
您可以注意到真正繁重的应用程序的差异.
StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步.
http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
在多个线程中使用StringBuffer是无用的,实际上几乎从未发生过.
考虑以下
Thread1: sb.append(key1).append("=").append(value1);
Thread2: sb.append(key2).append("=").append(value2);
Run Code Online (Sandbox Code Playgroud)
每个追加都是同步的,但是线程可以随时弯腰,这样你就可以拥有以下任何组合等等
key1=value1key2=value2
key1key2==value2value1
key2key1=value1=value2
key2=key1=value2value1
Run Code Online (Sandbox Code Playgroud)
这可以通过一次同步整行来避免,但是这使得使用StringBuffer而不是StringBuilder失败了.
即使你有一个正确同步的视图,它也比创建整行的线程本地副本更复杂,例如StringBuilder和日志行一次到类似Writer的类.
| 归档时间: |
|
| 查看次数: |
24212 次 |
| 最近记录: |