字符串对象是不可变的,所以它本质上是线程安全的,所以我可以在线程上下文中使用它而无需同步。
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/