ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java.util.ConcurrentModificationException
    Programming/Java 2022. 5. 15. 23:25
    반응형

    오늘은 ConcurrentModificationException에 대해서 알아보려고 한다.

    이 Exception은 대부분 Collection 객체를 중간에 건들일 때 (ex, remove)발생한다.

    Iterator로 반복을 하고 있거나 할 때 Collection을 수정하는 경우 발생한다.

    나의 경우에는 순환 함수를 호출할 때 매개함수로 쓰인 list를 수정하자 해당 exception이 발생했다.

     

    왜 발생시킬까..?

    그 이유는, 반복문에서 중간에 리스트에 값을 더하거나 삭제하거나 하면 반복문이 영원히 끝나지 않게 될 수도 있기 때문이다.

    이런걸 보면 자바는 참 자유도가 낮다...

     

    해결 방법?

    나는 그냥 내가 직접 list를 하나 카피해서 거기에 작업을 했는데 알고보니, Java 자체에서 CopyOnWriteArrayList라는 클래스를 제공한다고 한다. 

    • CopyOnWriteArrayList is a thread-safe variant of ArrayList where operations which can change the ArrayList (add, update, set methods) creates a clone of the underlying array.

    이렇게 적혀있는 문서를 발견했다.

    즉, 내가 이해하기로는 이 컬렉션으로 작업을 하면 어떤 수정사항이 일어나게 될 때 Compiler가 알아서 새 컬렉션을 만들어서 수정해주는 것 같다. 그 후에 sync는 JVM이 알아서 맞춰주는 것

     

    하지만 이 방법은 값이 많이 들어있거나 수정이 잦은 경우, 매번 다시 컬렉션을 만들고 복사하기 때문에 비효율적이다.

     

    그냥 반복문에서 수정이 필요할 때 카피해서 리스트 하나 만들어서 쓰는게 맘 편한 것 같다....

    반응형

    'Programming > Java' 카테고리의 다른 글

    Java :: ArrayList vs Linked List  (0) 2022.04.17

    댓글

Designed by Tistory.