What is purpose of Collections.unmodifiableCollection

Carvia Tech | May 04, 2019 | 1 min read | 71 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:

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();
    }
}
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:
  1. What are four principles of OOP, How aggregation is different than Composition?
  2. What is Deadlock in Java? How to troubleshoot and how to avoid deadlock
  3. Difference between Comparable and Comparator in Java
  4. What is polymorphism in Java OOP
  5. How will you implement your custom threadsafe Semaphore in Java
  6. What is difference between sleep() and wait() method in Java?
  7. What is difference between HashMap and HashSet



Find more on this topic:
Core Java image
Core Java

Core Java - OOP Concepts, Garbage Collection, Multi-threading, Collections Framework, Java 8 Features, Lambda Functions, Streams.

Last updated 1 week ago


Recommended books for interview preparation:

This website uses cookies to ensure you get the best experience on our website. more info