Skip to content

Latest commit

ย 

History

History
50 lines (37 loc) ยท 2.26 KB

File metadata and controls

50 lines (37 loc) ยท 2.26 KB

Thread-safe Collection

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Synchronized Collection
    • Vector
    • Hashtable
    • Collections ํด๋ž˜์Šค์˜ synchronized ์ •์  ์ƒ์„ฑ์ž

Synchronized Collection (๋™๊ธฐํ™” ์ปฌ๋ ‰์…˜)

Vector

  • ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ synchronized ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋œ List
  • ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ํ•˜์ง€๋งŒ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ๋™๊ธฐํ™”๋ฅผ ํ•ด ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ

Hashtable

  • ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ synchronized ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋œ Map
  • ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ํ•˜์ง€๋งŒ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ๋™๊ธฐํ™”๋ฅผ ํ•ด ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ

Collections์˜ synchronized List/Map/Set

  • JDK 1.2์— ์ถ”๊ฐ€
  • ๋‚ด๋ถ€์ ์œผ๋กœ mutex ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•˜๋ฉฐ synchronized block์„ ํ†ตํ•ด ๊ธฐ์กด List/Map/Set์˜ ๋™์ž‘์„ wrapping
  • ๋ชจ๋“  ๋ฉ”์„œ๋“œ์—์„œ ๋™์ผ mutex๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ฐ์ฒด์—์„œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋งŒ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•˜๋‚˜์˜ ์›์ž์  ๋‹จ์œ„๋กœ ๋ฌถ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋“ค์„ ๋‹ค์‹œ synchronized๋กœ ๋ฌถ์–ด์•ผ ํ•จ

Concurrent Collections

  • JDK 1.5์— ์ถ”๊ฐ€
  • ๋™์‹œ์„ฑ์„ ์œ„ํ•œ java.util.concurrent ํŒจํ‚ค์ง€ ๋‚ด ์ปฌ๋ ‰์…˜๋“ค
  • CopyOnWriteArrayList
    • ์“ฐ๊ธฐ ๋ฐœ์ƒ ์‹œ ๋ฝ์„ ๊ฑธ๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ธฐ์กด ๋ฐฐ์—ด์„ ๋Œ€์ฒด
      • ์“ฐ๊ธฐ ๋™์ž‘์€ ๋ฐฐ์—ด ๋ณต์‚ฌ๋ผ๋Š” ๊ณ ๋น„์šฉ ์ž‘์—…์„ ์ˆ˜๋ฐ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ๊ธฐ๊ฐ€ ๋งŽ์€ ๋ฐ์ดํ„ฐ ์ €์žฅ์—๋Š” ์•Œ๋งž์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
    • ์“ฐ๊ธฐ์— ๊ณ ๋น„์šฉ ๋™๊ธฐํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๋Œ€์‹  ์ฝ๊ธฐ๋Š” Lock ์—†์ด๋„ ๋™๊ธฐํ™”๋ฅผ ์ œ๊ณตํ•ด ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๋†’์ž„
  • CopyOnWriteArraySet
    • ๋‚ด๋ถ€ ๊ตฌํ˜„์€ CopyOnWriteArrayList์™€ ๋™์ผํ•˜๋‚˜ ์ค‘๋ณต ๋ฐฉ์ง€๋งŒ ์ ์šฉ
    • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์“ฐ๊ธฐ์— ๋™๊ธฐํ™”๋ฅผ ์ ์šฉํ•˜๊ณ  ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ๋‚ฎ์ถ”๋Š” ๋Œ€์‹  ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๋†’์ž„
  • ConcurrentHashMap
    • ํ…Œ์ด๋ธ”์˜ Bucket์„ ๊ธฐ์ค€์œผ๋กœ Lock ๋˜๋Š” CAS(Compare-And-Set)์„ ์ ์šฉ
      • ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฒ„ํ‚ท์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฒ„ํ‚ท์—๋งŒ Lock์„ ๊ฑธ๊ณ  ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰
      • ๋นˆ ๋ฒ„ํ‚ท์ธ ๊ฒฝ์šฐ CAS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด Lock ์—†์ด ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰
  • ConcurrentLinkedQueue
    • ๋ฝ ์—†์ด ๋™์ž‘ํ•˜๋Š” non-blocking ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ
    • LinkedList ๊ธฐ๋ฐ˜

Reference