在 this教程中给出了 StringBuffer 是同步的而 StringBuilder 不是同步的
类可以同步吗?
我知道同步方法是针对特定线程锁定的,而非同步方法则不然。但是如何使用非同步方法提高程序的性能呢?
代码来自here
public class Main { public static void main(String[] args) { int N = 77777777; long t; { StringBuffer sb = new StringBuffer(); t = System.currentTimeMillis(); for (int i = N; i --> 0 ;) { sb.append(""); } System.out.println(System.currentTimeMillis() - t); } { StringBuilder sb = new StringBuilder(); t = System.currentTimeMillis(); for (int i = N; i --> 0 ;) { sb.append(""); } System.out.println(System.currentTimeMillis() - t); } } }
给出
2241 ms
的数字对于StringBuffer
与753 ms
对于StringBuilder
.
并根据this额外的代码是StringBuffer中的synchronized关键字。这个synchronized关键字是否会花费额外的1488ms,如果是的话,那么我们应该总是选择StringBuilder而不是StringBuffer吗?
提前致谢。
最佳答案
不,类无法同步。应该说 StringBuffer
是线程安全的。
同步涉及额外的步骤,因此显然会对性能造成微小的影响。然而,这不是您想要开始优化的地方。此外,无竞争同步应该很快,因此在大多数情况下使用 StringBuffer
而不是 StringBuilder
不会有任何区别。
关于java - 与同步类相比,使用非同步类的性能如何提高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24820354/