http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html
Note that this implementation is not synchronized. If multiple threads access a linked list concurrently, and at least one of the threads modifies the list structurally, it must be synchronized externally.
如果不这样做会发生什么?您是否会导致 JVM 崩溃、引发异常或只是产生不一致的状态?
如果只有一个写入者但并发读取不 protected 怎么办?您是否仍然会崩溃并弄乱状态,或者只是产生不一致的读取?
这是特定于实现的,还是规范保证一定程度的安全性和/或原子性?
最佳答案
在多线程环境中使用不同步的集合会导致脏读(数据状态不一致)和ConcurrentModificationException
等问题。 (主要是当一个线程修改了集合的内容,而另一个线程正在迭代它时)。
根据您的使用情况,这可能会导致您的应用程序崩溃或 deadlock (当一个线程由于上述原因被 JVM 关闭时,未捕获的异常)。更糟糕的是,它可能会导致难以追踪的棘手问题和错误结果。不过,它不会导致 JVM 本身崩溃。
我建议查看 java.util.concurrent
包裹。您会发现各种各样的线程安全、高效的集合。它们中的大多数都具有弱一致迭代器,返回反射(reflect)迭代器创建时或创建后某个时刻集合状态的元素。这意味着它们不会抛出 ConcurrentModificationException,并且可以与其他操作同时进行。
有关 Java 内存模型及其保证的信息,请参阅 this (非常值得一读!)。
关于java - 如果同时修改未 protected Java 集合会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629012/