JavaTM 2 Platform
Standard Ed. 5.0

ÆÐÅ°Áö java.util.concurrent

º¸Åë, À¯Æ¿¸®Æ¼ Ŭ·¡½º´Â º´Çà ÇÁ·Î±×·¡¹ÖÀ¸·Î À¯¿ëÇÕ´Ï´Ù.

ÂüÁ¶Ã³:
          ¼³¸í

ÀÎÅÍÆäÀ̽º °³¿ä
BlockingQueue<E> ¿ä¼ÒÀÇ Ãëµæ½Ã¿¡ Å¥°¡ ºô ¶§±îÁö ´ë±âÇϰųª ¿ä¼ÒÀÇ Æ÷ÇԽÿ¡ Å¥³»ÀÇ °ø°£ÀÌ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ´ë±âÇÏ´Â Á¶ÀÛÀ» Ãß°¡ Áö¿øÇÏ´Â Queue .
Callable<V> °á°ú¸¦ µ¹·ÁÁִ ŽºÅ©.
CompletionService<V> »õ·Î¿î ºñµ¿±â ŽºÅ©ÀÇ »ý¼ºÀ» ¿Ï·áÇÊ Å½ºÅ©ÀÇ °á°úÀÇ ¼Òºñ·ÎºÎÅÍ ºÐ¸®ÇÏ´Â ¼­ºñ½º.
ConcurrentMap<K, V> Ãß°¡ÀÇ ¿øÀÚÀû putIfAbsent, remove, replace ¸Þ¼­µå¸¦ Á¦°øÇÏ´Â Map .
Delayed ÁöÁ¤µÈ Áö¿¬ ÈÄ¿¡ µ¿ÀÛÇÏ´Â °´Ã¼¸¦ ¸¶Å©Çϱâ À§ÇÑ, È¥ÇÕ ½ºÅ¸ÀÏÀÇ ÀÎÅÍÆäÀ̽ºÀÌ ÀÎÅÍÆäÀ̽ºÀÇ ±¸ÇöÀº, getDelay ¸Þ¼­µå¿Í Á¤ÇÕ¼ºÀÌ ÀÖ´Â ¼ø¼­¸¦ Á¦°øÇÏ´Â compareTo ¸Þ¼­µå¸¦ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù.
Executor ¼Û½ÅµÈ Runnable ŽºÅ©¸¦ ½ÇÇàÇÏ´Â °´Ã¼.
ExecutorService Á¾·á¸¦ °ü¸®ÇÏ´Â ¸Þ¼­µå ¹× 1°³ ÀÌ»óÀÇ ºñµ¿±â ŽºÅ©ÀÇ ÁøÇà »óȲÀ» ÃßÀûÇÏ´Â Future¸¦ »ý¼º °¡´ÉÇÑ ¸Þ¼­µå¸¦ Á¦°øÇÏ´Â Executor .
Future<V> Future´Â ºñµ¿±â °è»êÀÇ °á°ú¸¦ ³ªÅ¸³À´Ï´Ù.
RejectedExecutionHandler ThreadPoolExecutor ·Î ½ÇÇà ºÒ°¡´ÉÇÑ Å½ºÅ©ÀÇ Çڵ鷯
ScheduledExecutorService ÁöÁ¤µÈ Áö¿¬ ½Ã°£ ÈÄ, ¶Ç´Â ÁÖ±âÀûÀ¸·Î Ä¿¸àµåÀÇ ½ÇÇàÀ» ½ºÄÉÁÙ °¡´ÉÇÑ ExecutorService .
ScheduledFuture<V> Ãë¼ÒÇØ °¡´ÉÇÑ, Áö¿¬ µÈ °á°ú »ý¼º ¾×¼Ç.
ThreadFactory ¿ä±¸¿¡ ÀÀÇØ »õ·Î¿î thread¸¦ ÀÛ¼ºÇÏ´Â °´Ã¼.
 

Ŭ·¡½º °³¿ä
AbstractExecutorService ExecutorService ½ÇÇà ¸Þ¼­µåÀÇ µðÆúÆ® ±¸ÇöÀ» Á¦°øÇÕ´Ï´Ù.
ArrayBlockingQueue<E> ¹è¿­¿¡ ±Ù°ÅÇÏ´Â ¹Ù¿îµå Çü½Äºí·Ï Å¥ .
ConcurrentHashMap<K, V> ÃëµæÀÇ ¿ÏÀüÇÑ µ¿½Ã¼º ¹× ¿¹»óµÇ´Â Á¶Á¤ °¡´ÉÇÑ °»½Å µ¿½Ã¼ºÀ» Áö¿øÇÏ´Â Çؽà Å×À̺í.
ConcurrentLinkedQueue<E> ¾È ¹Ù¿îµå Çü½ÄÀÇ thread ¼¼ÀÌÇÁÀΠť º£À̽ºÀÇ ¸µÅ© ³ëµå.
CopyOnWriteArrayList<E> ±âº»À¸·Î µÇ´Â ¹è¿­ÀÇ »õ·Î¿î º¹»çº»À» ÀÛ¼ºÇÔÀ¸·Î½á ¸ðµç º¯°æ Á¶ÀÛ (Ãß°¡ ¼³Á¤µî)ÀÌ ±¸ÇöµÇ´Â ArrayList thread ¼¼ÀÌÇÁÀÎ º¯¼öÀÔ´Ï´Ù.
CopyOnWriteArraySet<E> ¸ðµç Á¶ÀÛÀ¸·Î CopyOnWriteArrayList¸¦ »ç¿ëÇÏ´Â Set .
CountDownLatch ´Ù¸¥ thread·Î ½ÇÇàÁßÀÇ Á¶ÀÛ ¼¼Æ®°¡ ¿Ï·áÇÒ ¶§±îÁö, 1°³ ÀÌ»óÀÇ thread¸¦ ´ë±â °¡´ÉÇÏ°Ô ÇÏ´Â µ¿±â Áö¿ø.
CyclicBarrier thread ¼¼Æ®ÀÇ °¢°¢ÀÌ °øÅëÀÇ ¹Ù¸®¾î Æ÷ÀÎÆ®¿¡ À̸¦ ¶§±îÁö ´ë±âÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÏ´Â µ¿±âÈ­ Áö¿ø ±â´É.
DelayQueue<E extends Delayed> Delayed ¿ä¼ÒÀÇ ¾È ¹Ù¿îµå Çü½Äºí·Ï Å¥ .
Exchanger<V> 2°³ÀÇ thread°¡ °´Ã¼¸¦ ±³È¯ °¡´ÉÇÑ µ¿±â Æ÷ÀÎÆ®.
ExecutorCompletionService<V> ŽºÅ©ÀÇ ½ÇÇàÀ¸·Î ÁöÁ¤µÈ Executor¸¦ »ç¿ëÇÏ´Â CompletionService .
Executors ÀÌ ÆÐÅ°Áö·Î Á¤ÀÇµÈ Executor, ExecutorService, ScheduledExecutorService, ThreadFactory ¹× Callable Ŭ·¡½º¿ëÀÇ ÆÑÅ丮 ¹× À¯Æ¿¸®Æ¼ ¸Þ¼­µå.
FutureTask<V> Ãë¼ÒÇØ °¡´ÉÇÑ ºñµ¿±â °è»ê.
LinkedBlockingQueue<E> ¸µÅ© ³ëµå¿¡ ±Ù°ÅÇÏ´Â ¿É¼ÇÀÇ ¹Ù¿îµå Çü½Äºí·Ï Å¥ .
PriorityBlockingQueue<E> PriorityQueue Ŭ·¡½º¿Í °°Àº ¼ø¼­ºÎ ±ÔÄ¢À» »ç¿ëÇØ, ºí·Ï Ãëµæ Á¶ÀÛÀ» Á¦°øÇÏ´Â ¾È ¹Ù¿îµå Çü½Äºí·Ï Å¥ .
ScheduledThreadPoolExecutor ÁöÁ¤µÈ Áö¿¬ ÈÄ ¶Ç´Â ÁÖ±âÀûÀ¸·Î ½ÇÇàÇϱâ À§ÇÑ Ä¿¸àµå¸¦ Ãß°¡ ½ºÄÉÁÙ °¡´ÉÇÑ ThreadPoolExecutor .
Semaphore Ä«¿îÆ®¿¡ »ç¿ëµÇ´Â semaphore.
SynchronousQueue<E> °¢ put°¡ take¸¦ ´ë±âÇØ, ±× ¿ªµµ ½ÇÇàÇÒ ÇÊ¿ä°¡ Àִºí·Ï Å¥ .
ThreadPoolExecutor ¸¹Àº °æ¿ì, Ç® µÈ º¹¼öÀÇ threadÀÇ ¾î´ÀÂÊÀ̵çÀ» »ç¿ëÇØ, ¼Û½ÅµÈ °¢ ŽºÅ©¸¦ ½ÇÇàÇÏ´Â ExecutorService .
ThreadPoolExecutor.AbortPolicy RejectedExecutionExceptionÀ» Throw ÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
ThreadPoolExecutor.CallerRunsPolicy executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ execute ¸Þ¼­µåÀÇ thread È£Ãâ·Î °ÅºÎµÈ ŽºÅ©¸¦ Á÷Á¢ ½ÇÇàÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
ThreadPoolExecutor.DiscardOldestPolicy executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ °¡Àå ³°Àº ¹Ìó¸®ÀÇ ¿ä±¸¸¦ ÆıâÇØ execute¸¦ Àç½ÃÇàÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
ThreadPoolExecutor.DiscardPolicy °ÅºÎµÈ ŽºÅ©¸¦ ¿¹°í ¾øÀÌ ÆıâÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
 

¿­°ÅÇüÀÇ °³¿ä
TimeUnit TimeUnit´Â ±â°£ÀÌ ÁöÁ¤µÈ ÀÔµµ ´ÜÀ§·Î ³ªÅ¸³À´Ï´Ù.
 

¿¹¿Ü °³¿ä
BrokenBarrierException °íÀå »óÅ¿¡ ÀÖ´ÂÁö, threadÀÇ ´ë±âÁß¿¡ °íÀå »óÅ¿¡ µé¾î°¡´Â ¹Ù¸®¾î¸¦, thread°¡ ´ë±âÇÏ·Á°í ÇÏ°í ÀÖÀ» ¶§ ¹ß»ýµÇ´Â ¿¹¿ÜÀÔ´Ï´Ù.
CancellationException ŽºÅ©°¡ »èÁ¦µÇ¾ú±â ¶§¹®¿¡ FutureTask µîÀÇ °ªÀ» »ý¼ºÇϴ ŽºÅ©ÀÇ °á°ú¸¦ ÃëµæÇÒ ¼ö ¾ø´Â °ÍÀ» ³ªÅ¸³»´Â ¿¹¿Ü.
ExecutionException ¿¹¿ÜÀÇ Throw¿¡ ÀÇÇØ Áß´ÜµÈ Å½ºÅ©ÀÇ °á°ú¸¦ ÃëµæÇÏ·Á°í ÇßÀ» ¶§¿¡ ¹ß»ýµÇ´Â ¿¹¿Ü.
RejectedExecutionException ŽºÅ©¸¦ ¹Þ¾Æµé¿© ½ÇÇàÇÒ ¼ö ¾ø´Â °æ¿ì¿¡ Executor ¿¡ ÀÇÇØ ¹ß»ýµÇ´Â ¿¹¿Ü
TimeoutException ºí·Ï Á¶ÀÛÀÌ Å¸ÀÓ ¾Æ¿ô ÇßÀ» ¶§¿¡ ¹ß»ýµÇ´Â ¿¹¿Ü.
 

ÆÐÅ°Áö java.util.concurrent ¼³¸í

º¸Åë, À¯Æ¿¸®Æ¼ Ŭ·¡½º´Â º´Çà ÇÁ·Î±×·¡¹ÖÀ¸·Î À¯¿ëÇÕ´Ï´Ù. ÀÌ ÆÐÅ°Áö¿¡´Â ¸î°³ÀÇ ¼Ò±Ô¸ðÀÇ Ç¥ÁØÈ­ µÈ È®Àå °¡´É üÁ¦ ¹× Æí¸®¼ºÀÌ ³ô°í, ´Ù¸¥ Á¡¿¡¼­´Â ´ÜÁ¶·Î¿ö ±¸ÇöÀÇ °ï¶õÇÑ ±â´ÉÀ» Á¦°øÇϴ Ŭ·¡½º°¡ Æ÷ÇԵ˴ϴÙ. ÀÌÇÏ¿¡ ÁÖ¿ä ÄÄÆÛ³ÍÆ®¿¡ ´ëÇØ °£°áÇÏ°Ô ¼³¸íÇÕ´Ï´Ù. locks ¹× atomic ÆÐÅ°Áöµµ ÂüÁ¶ÇϽʽÿÀ.

Executor

ÀÎÅÍÆäÀ̽º. Executor ´Â thread Ç®, ºñµ¿±â ÀÔÃâ·Â ¹× °æ·® ŽºÅ© üÁ¦¸¦ Æ÷ÇÔÇÑ, thread¸¦ ´àÀº Ä¿½ºÅÒ ÇϺÎÁ¶Á÷À» Á¤ÀÇÇϱâ À§ÇÑ Ç¥ÁØÈ­ µÈ ´Ü¼øÇÑ ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. »ç¿ëÁßÀÇ ±¸»ó Executor Ŭ·¡½º¿¡ ÀÀÇØ, »õ·Î¿î ÀÛ¼ºµÈ thread, ±âÁ¸ÀÇ Å½ºÅ© ½ÇÇà thread, ¶Ç´Â execute()¸¦ È£ÃâÇÏ´Â thread³»¿¡¼­ ŽºÅ©¸¦ Â÷·ÊÂ÷·Ê ¶Ç´Â µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ExecutorService ´Â º¸´Ù ¿Ï¼ºµµÀÇ ³ôÀº µ¿±â ŽºÅ© ½ÇÇà üÁ¦¸¦ Á¦°øÇÕ´Ï´Ù. ExecutorService´Â ŽºÅ©ÀÇ Å¥À× ¹× ½ºÄÉÁÙ¸µÀ» °ü¸®ÇØ, Á¦¾îµÈ ¼Ë´Ù¿îÀ» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. ScheduledExecutorService ¼­ºê ÀÎÅÍÆäÀ̽º´Â Áö¿¬ ¹× ÁÖ±âÀûÀΠŽºÅ© ½ÇÇà Áö¿ø¸¦ Ãß°¡ÇÕ´Ï´Ù. ExecutorServices´Â Runnable ¿Í À¯»çÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Â Callable ·Î Ç¥ÇöµÇ´Â ÀÓÀÇÀÇ ÇÔ¼öÀÇ ºñµ¿±â ½ÇÇàÀ» °áÁ¤ÇÏ´Â ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. Future ´Â ÇÔ¼öÀÇ °á°ú¸¦ µ¹·ÁÁÖ°í, ½ÇÇàÀÌ ¿Ï·áÇß´ÂÁö ¾î¶°Çß´ÂÁö¸¦ ÆǺ° °¡´ÉÇÏ°Ô ÇØ, ½ÇÇàÀ» Ãë¼ÒÇÏ´Â ¼ö´ÜÀ» Á¦°øÇÕ´Ï´Ù. ±¸Çö. ThreadPoolExecutor ¹× ScheduledThreadPoolExecutor Ŭ·¡½º´Â Æ©´× °¡´ÉÇØ À¯¿¬¼ºÀÇ ³ôÀº thread Ç®À» Á¦°øÇÕ´Ï´Ù. Executors Ŭ·¡½º´Â Executor °¡Àå ÀϹÝÀûÀÎ Á¾·ù ¹× ±¸¼ºÀÇ ÆÑÅ丮 ¸Þ¼­µå ¹× À̰͵鿡 ƯÈ÷ ´ëÀÀÇÏ°í ½ÍÀº ±¸µÎÀΰ¡ÀÇ À¯Æ¿¸®Æ¼ ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. Executor¿¡ ±Ù°ÅÇÏ´Â ´Ù¸¥ À¯Æ¿¸®Æ¼¿¡´Â Future ÀϹÝÀûÀÎ È®Àå °¡´É ±¸ÇöÀ» Á¦°øÇÏ´Â ±¸»ó Ŭ·¡½º FutureTask ¹× ºñµ¿±â ŽºÅ© ±×·ìÀÇ Ã³¸® Á¶Á¤À» Áö¿øÇÏ´Â ExecutorCompletionService °¡ Æ÷ÇԵ˴ϴÙ.

Å¥

java.util.concurrent ConcurrentLinkedQueue Ŭ·¡½º´Â È¿À² ¹× È®À强ÀÌ ³ô°í, thread ¼¼ÀÌÇÁÀÎ ºñºí·ÎÅ· FIFO Å¥¸¦ Á¦°øÇÕ´Ï´Ù. java.util.concurrent 5°³ÀÇ ±¸Çö LinkedBlockingQueue, ArrayBlockingQueue, SynchronousQueue, PriorityBlockingQueue ¹× DelayQueue ´Â put ¹× take ºí·ÎÅ· ¹öÀüÀ» Á¤ÀÇÇÏ´Â È®ÀåµÈ BlockingQueue ÀÎÅÍÆäÀ̽º¸¦ Áö¿ø ÇÕ´Ï´Ù. ÇÁ·Îµà¼­ ÄÁ½´¸Ó(consumer), ¸Þ¼¼Áö ó¸®, º´Çà ŽºÅ© ½ÇÇà ¹× °ü·ÃµÈ º´Çà ¼³°è¿ëÀÇ °¡Àå ÀϹÝÀûÀÎ »ç¿ë ÄÁÅؽºÆ®Àº ´Ù¸¥ Ŭ·¡½ºÀÇ ´ë»óÀÌ µË´Ï´Ù.

ŸÀ̹Ö

TimeUnit Ŭ·¡½º´Â ŸÀÓ ¾Æ¿ô¿¡ ±Ù°ÅÇÏ´Â Á¶ÀÛÀ» ÁöÁ¤ ¹× Á¦¾îÇϱâ À§ÇÑ º¹¼öÀÇ »ó¼¼ (³ª³ëÃʸ¦ Æ÷ÇÔÇÑ´Ù)¸¦ Á¦°øÇÕ´Ï´Ù. ÆÐÅ°Áö³»ÀÇ ´ëºÎºÐÀÇ Å¬·¡½º¿¡´Â ¹«Á¦ÇÑÀÇ ´ë±â¿¡ ´õÇØŸÀÓ ¾Æ¿ô¿¡ ±Ù°ÅÇÏ´Â Á¶ÀÛÀÌ Æ÷ÇԵ˴ϴÙ. ŸÀÓ ¾Æ¿ôÀ» »ç¿ëÇÏ´Â °æ¿ì´Â Ç×»ó, ¸Þ¼­µå°¡ ŸÀÓ ¾Æ¿ôÀ» ³ªÅ¸³»±â Àü¿¡ ´ë±âÇÒ ÇÊ¿ä°¡ ÀÖ´Â ÃÖ¼Ò ½Ã°£ÀÌ, ŸÀÓ ¾Æ¿ô¿¡ ÀÇÇØ ÁöÁ¤µË´Ï´Ù. ±¸ÇöÀº ŸÀÓ ¾Æ¿ôÀÇ ¹ß»ý ´ÙÀ½¿¡ ¿Ã »Ó »¡¸® ±×°ÍÀ» °ËÃâÇϵµ·Ï ÃÖ¼±ÀÌ ³ë·ÂÇÕ´Ï´Ù¸¸, ŸÀÓ ¾Æ¿ôÀÇ °ËÃâ·ÎºÎÅÍ Å¸ÀÓ ¾Æ¿ô ÈÄ¿¡ thread°¡ ½ÇÁ¦·Î Àç½ÇÇàµÇ¾î±îÁöÀÇ »çÀÌ¿¡ ¹«Á¦ÇÑÀÇ ½Ã°£ÀÌ °æ°úÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

µ¿±âÈ­ ÀåÄ¡

ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â Ư¼ö¿ëµµÀÇ µ¿±â¸¦ Áö¿øÇϱâ À§Çؼ­ 4°³ÀÇ Å¬·¡½º°¡ »ç¿ëµË´Ï´Ù Semaphore is a classic concurrency tool. CountDownLatch is a very simple yet verySemaphore ´Â Ç¥ÁØÀûÀÎ concurrent processing ÅøÀÔ´Ï´Ù.

CountDownLatch ´Â ¸Å¿ì ´Ü¼øÇÕ´Ï´Ù¸¸, ÁöÁ¤µÈ ¼öÀÇ ½ÅÈ£, À̺¥Æ®, ¶Ç´Â »óÅ¿¡ À̸¦ ¶§±îÁö ºí·ÏÇϱâ À§ÇÑ, ÀϹÝÀûÀÎ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù. CyclicBarrier ´Â ÀϺÎÀÇ º´Çà ÇÁ·Î±×·¡¹ÖÀ¸·Î µµ¿òÀÌ µÇ´Â ¼³Á¤ °¡´ÉÇÑ ´ÙÁß µ¿±â Æ÷ÀÎÆ®ÀÔ´Ï´Ù. Exchanger¸¦ »ç¿ëÇϸé, 2°³ÀÇ thread°¡ ¸¸³µÀ» ¶§¿¡ °´Ã¼¸¦ ±³È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù . ÀÌ°ÍÀº ¸î°³ÀÇ ÆÄÀÌÇÁ¶óÀÎ ¼³°è·Î À¯¿ëÇÕ´Ï´Ù. (¡ÚÄÚ¸àÆ® : ÀÌ ¹®ÀåÀÇ Àü2°³ÀÇ ¹®ÀåÀº ¹ø¿ª ´ë»óÀ̶ó°í »ý°¢ÇÕ´Ï´Ù¸¸, ¹ø¿ª ´ë»ó¿Ü·Î¼­ ű×È­ µÇ°í ÀÖ½À´Ï´Ù. ¹ø¿ª¹®À» Ãß°¡Çß½À´Ï´Ù. Ãß°¡ ºÎºÐ£º¡¸Semaphore ´Â Ç¥ÁØÀûÀÎ concurrent processing ÅøÀÔ´Ï´Ù. CountDownLatch ´Â ¸Å¿ì ´Ü¼øÇÕ´Ï´Ù¸¸,¡¹¡Ú)

µ¿½Ã Ä÷º¼Ç

ÀÌ ÆÐÅ°Áö´Â Queues¿¡ ´õÇØmulti-thread ÄÁÅؽºÆ®¿¡ ¼­ÀÇ »ç¿ëÀ» ¸ñÀûÀ¸·Î ¼³°èµÇ¾î µûºÐÇÑ°¡ÀÇ Collection ±¸Çö (ConcurrentHashMap, CopyOnWriteArrayList ¹× CopyOnWriteArraySet )À» Á¦°øÇÕ´Ï´Ù.

ÀÌ ÆÐÅ°ÁöÀÇ ÀϺÎÀÇ Å¬·¡½º¿¡¼­ »ç¿ëµÇ´Â Á¢µÎ»ç ¡¸Concurrent¡¹´Â À¯»çÇÑ ¡¸synchronized¡¹Å¬·¡½º ¹°¾î ±¸µÎÀΰ¡ÀÇ Á¡À¸·Î½á Â÷ÀÌ°¡ ÀÖ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. ¿¹¸¦ µé¾î, java.util.Hashtable ¹× Collections.synchronizedMap(new HashMap())´Â µ¿±âÈ­ µË´Ï´Ù. ´Ù¸¸, ConcurrentHashMap ´Â ¡¸µ¿½Ã¡¹ÀÔ´Ï´Ù. µ¿½Ã Ä÷º¼ÇÀº thread ¼¼ÀÌÇÁÀÔ´Ï´Ù¸¸, ´ÜÀÏÀÇ ¹èŸ ¶ô¿¡ ÀÇÇØ Á¦¾îµÇÁö ¾Ê½À´Ï´Ù. ConcurrentHashMap ƯÁ¤ÀÇ ÄÉÀ̽º¿¡¼­´Â µ¿½Ã Ä÷º¼ÇÀº ÀÓÀǼöÀÇ µ¿½Ã read ¹× Á¶Àý °¡´ÉÇÑ ¼öÀÇ µ¿½Ã write¸¦ ¾ÈÀüÇÏ°Ô Çã¿ëÇÕ´Ï´Ù. ¡¸µ¿±âÈ­ µÇ¾ú´Ù¡¹Å¬·¡½º´Â ´ÜÀÏÀÇ ¶ôÀ» Æ÷ÇÔÇÑ Ä÷º¼Ç¿¡ÀÇ ¾×¼¼½º ¸ðµç °ÍÀ» ½ºÄÉÀ̶óºñ¸®Æ¼¸¦ Èñ»ýÇصµ ¸·À» ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù. º¹¼öÀÇ thread°¡ °øÅëÀÇ Ä÷º¼Ç¿¡ ¾×¼¼½º ÇÏ´Â °ÍÀÌ ¿¹»óµÇ´Â ´Ù¸¥ °æ¿ì¿¡´Â ÀϹÝÀûÀ¸·Î ¡¸µ¿½Ã¡¹¹öÀüÀÌ ¿ì¼öÇÕ´Ï´Ù. µ¿±âÈ­µÇ¾î ÀÖÁö ¾ÊÀº Ä÷º¼ÇÀº Ä÷º¼ÇÀÌ °øÀ¯µÇ¾î ÀÖÁö ¾ÊÀºÁö, ´Ù¸¥ ¶ôÀ» º¸°ü À¯ÁöÇÏ°í ÀÖ´Â °æ¿ì¿¡°Ô¸¸ ¾×¼¼½º °¡´ÉÇÑ °æ¿ì°¡ ¶Ù¾î³³´Ï´Ù.

´ëºÎºÐÀÇ µ¿½Ã Collection ±¸Çö (´ëºÎºÐÀÇ Queue¸¦ Æ÷ÇÔÇÑ´Ù)¿¡¼­´Â Iterator¿¡ ÀÇÇØ ÆĽºÆ®ÆäÀ̸£Æ®¶ó¹Ù»ìÀº ¾Æ´Ï°í ¡¸¾àÇÑ ÀÏ°ü¼º¡¹ÀÌ Á¦°øµÇ´Â Á¡µµ java.util º¸Åë ÀÇ ±Ô¾à°ú´Â ´Ù¸¨´Ï´Ù. ¾àÇÑ ÀÏ°ü¼ºÀ» °¡Áö´Â ¹Ýº¹ÀÚ´Â thread ¼¼ÀÌÇÁÀÔ´Ï´Ù¸¸, ¹Ýµå½Ã ¹Ýº¹Áß¿¡ Ä÷º¼ÇÀ» ´Ù¿î ´çÇÒ ÇÊ¿ä´Â ¾ø±â ¶§¹®¿¡ ¹Ýº¹ÀÚÀÇ ÀÛ¼º ÀÌÈÄÀÇ °»½ÅÀ» ¹Ý¿µÇÏ´Â Àϵµ ¹Ý¿µÇÏÁö ¾Ê´Â °Íµµ °¡´ÉÇÕ´Ï´Ù.

µµÀÔµÈ ¹öÀü :
1.5

JavaTM 2 Platform
Standard Ed. 5.0

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ ÂüÁ¶ÇϽʽÿÀ.