我正在学习算法实现课程。我的老师提到了StringBuffer和StringBuilder,他说StringBuffer比StringBuilder更安全,因为在线程方面。真的吗?如果是这样,那意味着什么?我查了一下这个问题,很多答案都提到了同步。任何人都可以解释这意味着什么,以及如何使StringBuffer比StringBuilder更安全?
答案 0 :(得分:5)
StringBuffer
已同步所有方法。
来自java doc:
线程安全,可变的字符序列
同步是一个系统,用于将线程访问与代码部分同步,以便最多一个线程可以执行同步块。
如果您的代码不是多线程的,或者只是如果您使用的StringBuffer
未在线程之间共享,请使用StringBuilder
。它更快。
来自StringBuilder的javadoc:
可变的字符序列。该类提供API 兼容StringBuffer,但不保证 的同步即可。此类旨在用作插入 在字符串缓冲区为的地方替换StringBuffer 由单个线程使用(通常情况下)。哪里 可能,建议优先使用此类 StringBuffer,因为在大多数实现中它会更快。
答案 1 :(得分:0)
由于它的所有方法都是同步的,这意味着即使你有100个线程(或更多)同时使用和修改它,它也会在处理其他请求之前完全执行每个操作。使用StringBuilder,你没有这样的保证。