예전에 서버 개발을 하면서
AI 몬스터의 코딩을 하면서 Exception 이슈가 발생하여 문제를 찾아보았다.
문제는 ArrayList를 멀티쓰레드에서 사용하며
컨테이너내의 Index 순서가 맞지 않는 문제가 발생한 것이다.
처음에 디버그를 찍어보았을땐 맞는 순서대로 들어가는 것처럼 보였으나
ArrayList의 copy가 이뤄질때 전혀 다른 인덱스 순서가 있는 것을 확인했다.
처음엔 CopyOnWriteArrayList 를 사용하면 될 줄 알았지만.
마찬가지로 멀티쓰레드 관련 이슈를 완벽히 해결할 수는 없었다.
해결법을 알아보니
멀티쓰레드에서 사용되는 자료구조는
Concurrent 관련 자료구조를 사용해야 한다는 것을 알았다.
ConcurrentHashMap, ConcurrentLinkedQueue, ConcurrentQueue 등등..
[Java] ConcurrentHashMap 이란 무엇일까?
[Java] ConcurrentHashMap 이란 무엇일까?
들어가기 전에 HashTable , HashMap , ConcurrnetHashMap 은 많이 유사한 특징들을 가지고 있습니다. 하지만 세부적으로 보면 조금씩 꽤나 차이가 있는데요. 간단하게 어떤 차이가 있는지 알아보면서 시작
devlog-wjdrbs96.tistory.com
위의 블로그 글을 읽고 해결을 했다.
핵심은 synchronized 키워드를 사용한 클래스가 멀티쓰레드 환경에서 사용하기 적합한 클래스 라는 내용이다.
'프로그래밍 > JAVA' 카테고리의 다른 글
| 람다를 메서드 참조로 바꾸기(Method References) (0) | 2023.09.18 |
|---|
