gpt4 book ai didi

Java:使用同步集合的经验法则?

转载 作者:行者123 更新时间:2023-12-02 07:45:25 25 4
gpt4 key购买 nike

我正在阅读此 Stackoverflow thread关于使用 StringBuilder 与 StringBuffer。

底线似乎是,这两个集合是相同的,只是 StringBuffer 是同步的,是线程安全的,并且与 StringBuilder 相比,性能稍差一些,而 StringBuilder 则不是这些。

有人提出了 ArrayList 和 Vector 之间存在类似的关系。

除非我有意识地创建多个线程,否则不使用同步集合(或其他任何东西)是一个好的(安全)经验法则吗?

换句话说,我收到消息“尽可能使用新的 StringBuilder。”,我想知道的是,我如何确定它是可能的?

只要我不故意创建新线程,使用非同步集合是否安全?

最佳答案

使用不同步的东西,直到您确定需要同步为止。

部分问题例如StringBufferVector 的缺点是它们并不总是以正确的方式同步。对于Vector,您并不总是需要单独同步每个操作;通常,您真正想要的是同步操作 block ...为此,Vector 不一定比 ArrayListCollections.synchronizedList 更好>.

当您知道您正在使用并发和多线程时,请计算出您需要的同步的详细信息,但只需将 StringBuffer 替换为 StringBuilder 只会给出你会产生一种错误的安全感——即使你决定稍后使用并发,这也不一定是正确的并发类型

(如果您当前没有使用线程,那么将 StringBuffer 查找并替换为 StringBuilder 绝对没问题,甚至是推荐。上述参数为相反方向。)

关于Java:使用同步集合的经验法则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com