java - 线程上下文中的 String 对象和 StringBuffer 对象有什么区别?

标签 java multithreading

字符串对象是不可变的,所以它本质上是线程安全的,所以我可以在线程上下文中使用它而无需同步。

StringBuffer 对象具有同步的方法,因此如果线程尝试执行其方法,则没有同步不会有问题。

但是在线程上下文中将其对象用作资源需要它具有同步。

我无法清楚地理解突出显示的部分。谁能解释一下或提供代码引用,以消除我的疑问。

最佳答案

来自javadocs :

Whenever an operation occurs involving a source sequence (such as appending or inserting from a source sequence) this class synchronizes only on the string buffer performing the operation, not on the source.

这意味着,例如,如果您有如下代码:

StringBuffer bufferOne = new StringBuffer("abc");
StringBuffer bufferTwo = new StringBuffer("def");

bufferOne.append(bufferTwo);

然后它只在bufferOne上同步,而不是在bufferTwo上同步。换句话说,一些其他线程可能会在执行此操作时读取或写入bufferTwo

关于java - 线程上下文中的 String 对象和 StringBuffer 对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24097356/

相关文章:

c++ - SetThreadContext 在 x64 中仅修改 RIP 的最后 32 位

java - 我需要将标志放入同步块(synchronized block)中吗?

java - 表格单元格上组件的 ActionEvent 未发生

java - Win7 AD 环境中的 Tomcat NTLM 用户名查找 - samba 还是 waffle?

编程语言解析器的 Java 字符串标记化

ios - 从不正确的线程 Swift 访问的 Realm

Java 扫描器使用\R 模式(缓冲区边界问题)

java - Google App Engine 祖先查询

java - Java 线程中的 ThreadLocal 与成员变量

multithreading - 使用ptrace在多线程应用程序中检测linux调试器