ใ ConcurrentModificationException ์์ธ
ํฌํ๊ธฐ๋ฅ์ผ๋ก ์์ผ์ ์ข
๋ฃํ๋ฉด ๋ฐ์ํ๋ ์ค๋ ๋ ์์ธ + ๋ง์ง๋ง์ ํฌํํ ํด๋ผ์ด์ธํธ ์์ธ ๋ฐ์
์์ผ์ ์ข
๋ฃํ๋ฉด ๋ง์ง๋ง์ ํฌํํ ํด๋ผ์ด์ธํธ์ ์ต๋๋ํ๋ฅผ ์ป์ ํด๋ผ์ด์ธํธ๊ฐ ์ข
๋ฃ๋๋ฉฐ ๊ฒ์์ด ๋ฉ์ถ๋ค.
์๋๋ ConcurrentModificationException๊ฐ ๋ฐ์ํ์๋ ์ฝ์๋ก ํ์ํ ๋ด์ฉ
Exception in thread "Thread-0" java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620)
at last.controll.MafiaGameController$Handler.run(MafiaGameController.java:115)
Exception in thread "Thread-6" java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620)
at last.controll.MafiaGameController.broadcast(MafiaGameController.java:593)
at last.controll.MafiaGameController.ClientOut(MafiaGameController.java:463)
at last.controll.MafiaGameController.dayTime(MafiaGameController.java:143)
at last.controll.MafiaGameController$Handler.run(MafiaGameController.java:96)
List์ Map์ ์ปฌ๋ ์
์ ์์ ํจ๊ณผ ๋์์ ๋ค๋ฅธ ์ค๋ ๋์์ ์์ ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์์ธ์ด๋ค.
๋์ ๊ฒฝ์ฐ์๋ 2๊ฐ์ง๊ฐ ๋ฌธ์ ๊ฐ ๋์๋ค.
1) for each๋ฌธ์์ ๊ฐ์ฒด๊ฐ ์์ (์์ผ์ข
๋ฃ)๋๋ฉด์ ๋ค๋ฅธ ์ค๋ ๋์์๋ ์ข
๋ฃ๋ ์ค๋ ๋์ ๊ฐ์ญํ์ฌ ์์ธ๊ฐ ๋ฐ์
2) Map ์ปฌ๋ ์
์ remove ํ๋ ๋ถ๋ถ์ด ํ ๊ฐ ๋๋ฝ๋์ด ์์ธ๊ฐ ๋ฐ์
์ฒ์์ sleep์ผ๋ก ๊ฐ์ ๋ก ์ผ์์ ์งํด์ ์ค๋ ๋ ๊ฐ์ญ์ ์ค์ด๋ ค๊ณ ํ์ง๋ง ๋จ์ ํ ์คํธ ์ค ๋ชจ๋ ์ํฉ์์ ์์ธ ๋ฐ์
1๋ฒ๋ถํฐ ForEach๋ฌธ -> iterator๋ก ๋ฐ๊พธ์ด ํ์ธํด ๋ณด๋ 2๋ฒ์ด ์์ธ๋ฐ์๋์ด 2๋ฒ๊น์ง ์์ ํ์ฌ ์์ธ๋ฐ์์ ํด๊ฒฐ
2๋ฒ์ ํด๊ฒฐํ๊ณ 1๋ฒ์ ForEach๋ฌธ์ผ๋ก ๋ณต๊ตฌํ์ฌ ํ
์คํธ ๊ฒฐ๊ณผ ๋ฐ๋์ ์์ธ ๋ฐ์์ ํ์ง ์๋ ๊ฒ์ ๋ฐ๊ฒฌ iterator๋ก ๋ณ๊ฒฝํ์ฌ ๋ฌธ์ ๊ฐ ๋ ๋งํ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ ๊ฑฐ
๋น์บ 1์ฐจ ํ๋ก์ ํธ ํ๊ณ ๋ก
๋๋ ๊ทธ๋ ๊ฒ ์กฐ์ ธ์ก๋ค.
velog.io
'๐กํ๋ก์ ํธ ๋ฌธ์ ํด๊ฒฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋ ์งํ์ด ์ด์ ๋ถํ ์๋ ธ๋๋ฒ์ ๋ฎ์ (0) | 2025.02.15 |
---|---|
์ค๋ ์งํ์ด ์ด์ ์์ดํ์ดํ ๋น๊ณ ์ (0) | 2025.02.15 |
์ค๋ ์งํ์ด ์ด์ ์์ดํ์ด ์ฐ๊ฒฐ์ด ์ ๋ ๋ (0) | 2025.02.15 |