【发布时间】:2017-05-27 06:48:27
【问题描述】:
StringBuffer 和 StringBuilder 之间唯一/主要的区别是 StringBuffer 是线程安全的,而 StringBuilder 不是。
所以当要从单线程访问时使用StringBuilder,当要从多线程访问时使用StringBuffer。
让我们考虑一个 servlet 的例子:
public class MyClass extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuilder sb1 = new StringBuilder();
}
}
现在当请求到达 servlet 容器时,新线程将被创建,因此上面示例中的 get 方法将被多个线程访问。
问题是:
- StringBuilder 的非同步性质是否是这里的一个问题,相同的 StringBuilder 是跨线程共享还是在方法中声明,因此每个线程都有单独的 StringBuilder?
- 在哪种情况下,StringBuffer 必须优先于 StringBuilder?
【问题讨论】:
标签: java multithreading servlets