gpt4 book ai didi

java - 什么时候使用 Collections.synchronizedList 和 List 是错误的?

转载 作者:行者123 更新时间:2023-12-01 22:40:01 26 4
gpt4 key购买 nike

除了(轻微?)性能影响之外,为什么我要使用常规列表而不是 Collections.synchronizedList 与列表?

我正在处理的项目少于 10k 个条目,所以不在乎,但如果有人(也许是我)选择对此进行子类化,我需要记录该行为。

除了性能(超过 100k 条目)之外,为什么我不同步?

也就是说,使用synchronizedList 会带来什么惩罚?有多糟糕?对于我当前的应用程序来说,这不是问题。如果这是一个便宜的补充,为什么不呢?

最佳答案

Other than a (minor?) performance hit ...

事实上,如果列表在线程之间共享,则使用简单的同步列表(相对于更合适的列表)的性能影响可能会很大,具体取决于您在做什么。同步操作可能会成为并发瓶颈,从而降低应用程序的单核性能。

在设计多线程应用程序或需要线程安全且在多线程应用程序中高性能的可重用库时,简单的“黑白”规则是不够的。

<小时/>

That is, what penalty do I incur for using a synchronizedList? How bad is it? For my current application, it's not an issue. If it is a cheap addition, why not?

同步列表类使用原始对象锁定(互斥体)。

  • 如果锁是无争用的,那么这很便宜;每次获取和释放锁时可能需要 5 或 10 条指令。但是,开销可能取决于锁上是否存在先前争用。 (某些锁定方案会导致对象锁在第一次发生争用时“膨胀”...)

  • 如果锁被争用,那么它会更昂贵,因为这通常会涉及被阻塞的线程被取消调度和重新调度......以及上下文切换开销。还有另一种涉及“自旋锁定”的 JVM 级实现方法,但这需要被阻塞的线程在紧密循环中测试锁定对象。

  • 如果锁被持有很长时间(例如在 list.contains 中......对于一个长列表),那么通常会增加争用的概率

关于java - 什么时候使用 Collections.synchronizedList 和 List 是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26310150/

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