- Synchronized Collection
- Vector
- Hashtable
- Collections ํด๋์ค์ synchronized ์ ์ ์์ฑ์
- ๋ชจ๋ ๋ฉ์๋๊ฐ synchronized ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ List
- ์ค๋ ๋ ์ธ์ดํํ์ง๋ง ๋๊ธฐํ๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋๊ธฐํ๋ฅผ ํด ์ฑ๋ฅ ์ ํ ๋ฐ์
- ๋ชจ๋ ๋ฉ์๋๊ฐ synchronized ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ Map
- ์ค๋ ๋ ์ธ์ดํํ์ง๋ง ๋๊ธฐํ๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋๊ธฐํ๋ฅผ ํด ์ฑ๋ฅ ์ ํ ๋ฐ์
- JDK 1.2์ ์ถ๊ฐ
- ๋ด๋ถ์ ์ผ๋ก mutex ๊ฐ์ฒด๋ฅผ ์์ ํ๋ฉฐ synchronized block์ ํตํด ๊ธฐ์กด List/Map/Set์ ๋์์ wrapping
- ๋ชจ๋ ๋ฉ์๋์์ ๋์ผ mutex๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํ ๊ฐ์ฒด์์ ํ ๋ฒ์ ํ๋์ ๋ฉ์๋๋ง ์ํ ๊ฐ๋ฅ
- ์ฌ๋ฌ ์ฐ์ฐ์ ํ๋์ ์์์ ๋จ์๋ก ๋ฌถ์ด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ค์ ๋ค์ synchronized๋ก ๋ฌถ์ด์ผ ํจ
- JDK 1.5์ ์ถ๊ฐ
- ๋์์ฑ์ ์ํ
java.util.concurrentํจํค์ง ๋ด ์ปฌ๋ ์ ๋ค CopyOnWriteArrayList- ์ฐ๊ธฐ ๋ฐ์ ์ ๋ฝ์ ๊ฑธ๊ณ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ธฐ์กด ๋ฐฐ์ด์ ๋์ฒด
- ์ฐ๊ธฐ ๋์์ ๋ฐฐ์ด ๋ณต์ฌ๋ผ๋ ๊ณ ๋น์ฉ ์์ ์ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ธฐ๊ฐ ๋ง์ ๋ฐ์ดํฐ ์ ์ฅ์๋ ์๋ง์ง ์์ ์ ์์
- ์ฐ๊ธฐ์ ๊ณ ๋น์ฉ ๋๊ธฐํ๋ฅผ ์ ์ฉํ๋ ๋์ ์ฝ๊ธฐ๋ Lock ์์ด๋ ๋๊ธฐํ๋ฅผ ์ ๊ณตํด ์ฝ๊ธฐ ์ฑ๋ฅ์ ๋์
- ์ฐ๊ธฐ ๋ฐ์ ์ ๋ฝ์ ๊ฑธ๊ณ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ธฐ์กด ๋ฐฐ์ด์ ๋์ฒด
CopyOnWriteArraySet- ๋ด๋ถ ๊ตฌํ์
CopyOnWriteArrayList์ ๋์ผํ๋ ์ค๋ณต ๋ฐฉ์ง๋ง ์ ์ฉ - ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ๊ธฐ์ ๋๊ธฐํ๋ฅผ ์ ์ฉํ๊ณ ์ฐ๊ธฐ ์ฑ๋ฅ์ ๋ฎ์ถ๋ ๋์ ์ฝ๊ธฐ ์ฑ๋ฅ์ ๋์
- ๋ด๋ถ ๊ตฌํ์
ConcurrentHashMap- ํ
์ด๋ธ์ Bucket์ ๊ธฐ์ค์ผ๋ก Lock ๋๋ CAS(Compare-And-Set)์ ์ ์ฉ
- ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ฒํท์ธ ๊ฒฝ์ฐ ํด๋น ๋ฒํท์๋ง Lock์ ๊ฑธ๊ณ ์ฐ๊ธฐ๋ฅผ ์ํ
- ๋น ๋ฒํท์ธ ๊ฒฝ์ฐ CAS ์๊ณ ๋ฆฌ์ฆ์ ํตํด Lock ์์ด ์ฐ๊ธฐ๋ฅผ ์ํ
- ํ
์ด๋ธ์ Bucket์ ๊ธฐ์ค์ผ๋ก Lock ๋๋ CAS(Compare-And-Set)์ ์ ์ฉ
ConcurrentLinkedQueue- ๋ฝ ์์ด ๋์ํ๋ non-blocking ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ
- LinkedList ๊ธฐ๋ฐ