java – 想象一个真正的并发场景,其中应该使用StringBuffer而不
我知道StringBuffer和StringBuilder之间的区别.
read here!
通常,正如javadoc所说,
但是,StringBuilder的javadoc也说:
所以,我想知道,StringBuffer首选的情况真的存在吗?由于可变字符串主要用于单个线程,任何人都可以给我一个并发的现实场景,首选StringBuffer吗? 解决方法
StringBuffer是线程安全的原因是,在设计java api的第一个版本的那天,人们以不同于现在的方式接近并发.流行的观点是对象应该是线程安全的 – 因为Java支持线程,人们可能在多个线程中使用任何JDK类.后来,当Java开始针对执行时间进行优化时,那些不必要的同步块的成本开始成为一个问题,因此新的API被设计为不同步.更久以后,JVM开始优化锁定,以至于无争议的锁定基本上是免费的,这使整个决策变得没有实际意义.
StringBuffer仍然是线程安全的,因为旧代码可能依赖于它是线程安全的.这远非典型用途,但可以想象. 例如,假设您正在编写一个日志文件追加器,它将日志条目转发到中央服务器.由于我们不想在等待网络I / O时阻塞调用者,因此我们在专用线程中执行此操作.其他线程会在StringBuffer中累积其日志条目: class RemoteLogger implements Runnable,Appender { final StringBuffer buffer = new StringBuffer(); void append(String s) { buffer.append(s); } public void run() { for (;;) { Thread.sleep(100); String message = buffer.toString(); sendToServer(message); buffer.delete(0,message.length()); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |