public class UnModifiableCollection {
private List<String> names = new ArrayList<>();
public void testConcurrency() {
names.add("1");
names.add("2");
names.add("3");
names.add("4");
Collection < String > dynamicView = Collections.unmodifiableCollection(names);
for (String s: dynamicView) { (1)
System.out.println("s = " + s);
names.remove(0); (2)
}
}
public static void main(String[] args) {
UnModifiableCollection test = new UnModifiableCollection();
test.testConcurrency();
}
}
What is purpose of Collections.unmodifiableCollection
Carvia Tech | October 03, 2020 | 1 min read | 70 views | Multithreading and Concurrency
What does Collections.unmodifiableCollection() do? Is it safe to use the collection returned by this method in a multi-threading environment?
Collections.unmodifiableCollection() returns a unmodifiable dynamic view of underlying data structure. Any attempt direct or via iterator to modify this view throws UnsupportedOperationException, but any changes made in the underlying data structure will be reflected in the view.
This method is no substitute for the other thread safety techniques because iterating over a collection using this view may throw ConcurrentModificationException if original collection is structurally modified during the iteration. |
For example, the following code will throw ConcurrentModificationException in the for loop:
1 | this will throw ConcurrentModification in 2nd iteration |
2 | this is the culprit line modifying the underlying collection |
Hence, external synchronization is must if we are going to modify the underlying collection, even if you are using Collections.unmodifiableCollection()
.
Top articles in this category:
- What are four principles of OOP, How aggregation is different than Composition?
- Is Java Pure Object Oriented Language?
- What is difference between sleep() and wait() method in Java?
- What is difference between ExecutorService submit and execute method
- What is difference between HashMap and HashSet
- What will happen if we don't synchronize getters/accessors of a shared mutable object in multi-threaded applications
- What is Double Checked Locking Problem in Multi-Threading?
Find more on this topic:
Subscribe to Interview Questions
Recommended books for interview preparation:
Similar Posts
- Code review checklist for Java developers
- Count word frequency in Java
- Secure OTP generation in Java
- HmacSHA256 Signature in Java
- Submit Form with Java 11 HttpClient - Kotlin
- Java Exception Class Hierarchy
- Http download using Java NIO FileChannel
- CRC32 checksum calculation Java NIO
- Precision and scale for a Double in java
- Difference between HashMap, LinkedHashMap and TreeMap