任何人都可以向我解释一下在 Java 中改变非线程安全且被多个线程使用的集合的后果吗?
最佳答案
结果是未定义的并且有些随机。
对于设计为快速失败的 JDK 集合,您可能会收到 ConcurrentModificationException。这确实是集合线程安全特有的唯一结果,与任何其他类不同。
线程不安全类通常会出现的问题可能会发生:
- 集合的内部状态可能已损坏。
- 突变可能看起来是成功的,但事实上,其他线程在任何给定时间都可能看不到这些更改。它们可能一开始不可见,后来变得可见。
- 这些更改实际上可能在轻负载下成功,但在重负载且存在大量线程争用的情况下随机失败。
- 如上面评论中所述,可能会出现竞争条件。
还有很多其他的可能性,但没有一个是令人愉快的。最糟糕的是,当系统承受压力时,这些事情往往会在生产中最常见地暴露出来。
简而言之,您可能不想这样做。
关于java - 改变非线程安全集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985036/