字符串是不可变的,Java中的每个不可变对象都是线程安全的,这意味着String也是线程安全的。两个线程不能同时使用字符串。
StringBuffer是可变的,但StringBuffer中的每个方法都是同步的,StringBuffer是线程安全的。所以效果很慢。
那么My Query是String有任何性能问题吗?
答案 0 :(得分:2)
不可变并不意味着您不能同时在多个线程中使用相同的String。这意味着在调用append
来改变缓冲区内部状态的情况下,与StringBuffer相反的实例化后,内部状态无法更改。
这意味着它的设计是线程安全的。
StringBuffer的性能很低(与StringBuilder的性能相反),因为它需要在每次操作之前锁定对象的内部状态。
答案 1 :(得分:0)
这似乎不是一个真正的编程问题,但只是你的逻辑错误。
对于StringBuffer
但是,上述内容并不意味着反之亦然:
同步/锁定只是实现线程安全的众多方法之一。
答案 2 :(得分:-2)
String没有性能问题,因为String是不可变的,每次一个进程可以使用它,并且线程安全本质上没有人可以改变它。
虽然4
是可变的,但多个进程使用单个StringBuffer
对象,同步成本。这就是StringBuffer
的表现缓慢的原因。
<强>过程强>
进程具有自包含的执行环境。进程通常具有完整的私有基本运行时资源集;特别是,每个进程都有自己的内存空间。
<强>线程强>
线程有时被称为轻量级进程。进程和线程都提供了执行环境,但创建新线程所需的资源比创建新进程要少。