Java ¾ð¾î¸¦ ÀÌ¿ëÇÏ¿© ¸ÖƼ ¾²·¹µå¿Í º´Çàó¸® ÆÐÅÏÀ» ¹è¿ì´Â ÀÔ¹®¼. À̹ø °³Á¤ÆÇ¿¡¼´Â Java SE 5.0¿¡ ´ëÀÀÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥À» Ãß°¡ÇÏ¿´À¸¸ç, ÃÊÆÇ¿¡¼ µ¶ÀÚµéÀÌ º¸³»ÁØ µð¹ö±×¿Í ¿©·¯ °¡Áö Á¤º¸µéÀ» Ãß°¡ÇÏ¿´´Ù.
ÀÌ Ã¥¿¡¼´Â µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇØ ÁÖ·Î ´Ù·ç°í ÀÖÁö¸¸ ÁÖ¿ä Æ÷ÀÎÆ®¸¶´Ù Java ¾ð¾î¿¡ ´ëÇؼµµ ¼³¸íÇÏ°í ÀÖ´Ù. ¶§¹®¿¡ Àд٠º¸¸é Java ¾ð¾î¿¡ ´ëÇÑ ÀÌÇصµ ÇÔ²² ±í¾îÁö°Ô µÈ´Ù. Java ¾ð¾îÀÇ ¸ÖƼ ¾²·¹µå¿¡ ´ëÇÑ ÀÌÇØ°¡ ºÎÁ·ÇÑ µ¶ÀÚ¿¡°Ôµµ ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
ÀÌ Ã¥Àº Java ¾ð¾î¸¦ ÀÌ¿ëÇÏ¿© ¸ÖƼ ¾²·¹µå¿Í º´Çàó¸® ÆÐÅÏÀ» ¹è¿ì´Â ÀÔ¹®¼ÀÔ´Ï´Ù. À̹ø °³Á¤ÆÇ¿¡¼´Â Java SE 5.0¿¡ ´ëÀÀÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥À» Ãß°¡ÇÏ¿´À¸¸ç, ÃÊÆÇ¿¡¼ µ¶ÀÚ ¿©·¯ºÐµéÀÌ º¸³»ÁØ µð¹ö±×¿Í ¿©·¯ °¡Áö Á¤º¸µéÀ» Ãß°¡ÇÏ¿´½À´Ï´Ù. ÀÌ Ã¥¿¡¼´Â µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇØ ÁÖ·Î ´Ù·ç°í ÀÖÁö¸¸ ÁÖ¿ä Æ÷ÀÎÆ®¸¶´Ù Java ¾ð¾î¿¡ ´ëÇؼµµ ¼³¸íÇÏ°í ÀÖ½À´Ï´Ù. ¶§¹®¿¡ Àд٠º¸¸é Java ¾ð¾î¿¡ ´ëÇÑ ÀÌÇصµ ÇÔ²² ±í¾îÁö°Ô µË´Ï´Ù. Java ¾ð¾îÀÇ ¸ÖƼ ¾²·¹µå¿¡ ´ëÇÑ ÀÌÇØ°¡ ¾ÆÁ÷ ºÎÁ·ÇÑ µ¶ÀÚ¿¡°Ôµµ ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù.
* ÁÖ¿ä ³»¿ë
¸ÖƼ ¾²·¹µå°¡ ¿øÈ°ÇÏ°Ô »ç¿ëµÇ°í ÀÖ´Â ÇÁ·Î±×·¥¿¡¼´Â º¹¼ö 󸮸¦ º´ÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. GUI ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¸ÖƼ ¾²·¹µå¸¦ Á¦´ë·Î »ç¿ëÇÏ¸é »ç¿ëÀÚ¿¡ ´ëÇÑ ÀÀ´ä¼ºÀ» Çâ»ó½Ãų ¼ö ÀÖÀ¸¸ç, ¼¹ö »óÀÇ ÇÁ·Î±×·¥¿¡¼ ¸ÖƼ ¾²·¹µå¸¦ Á¦´ë·Î »ç¿ëÇÏ¸é º¹¼ö Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» º´Çà ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ Ã¥¿¡¼´Â ¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¥¿¡ ÀÚÁÖ »ç¿ëµÇ´Â ÆÐÅÏÀ» Java ¾ð¾î·Î ÀÛ¼ºÇÑ ±¸Ã¼ÀûÀÎ ÇÁ·Î±×·¥À» ¼Ò°³ÇÕ´Ï´Ù. ¾²·¹µåÀÇ ±âÃÊÁö½Ä¿¡¼ºÎÅÍ ¾²·¹µåÀÇ °³½Ã¿Í Á¾·á, ¾²·¹µå °£ÀÇ ¹èŸÁ¦¾î¿Í ÇùÁ¶µ¿ÀÛ, È¿°úÀûÀÎ »ç¿ë¹ý, ¾²·¹µå ¼öÀÇ °ü¸®, ¼öÇà ´É·Â °³¼±À» À§ÇÑ ÈùÆ® µîÀ» °¢ Àå¿¡¼ ¹è¿ì°Ô µË´Ï´Ù. ¶ÇÇÑ ÀÚÄ© ¹üÇϱ⠽¬¿î ½Ç¼ö³ª ¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¥À» Àд ¿ä·É¿¡ ´ëÇؼµµ °øºÎÇÕ´Ï´Ù.
* Ư¡ ¶Ç´Â °Á¡
1. ¸ÖƼ ¾²·¹µå ÆÐÅÏ Çؼ³
ÀÌ Ã¥ÀÇ °¢ Àå¿¡¼´Â ¸ÖƼ ¾²·¹µå¿Í º´Çà 󸮿¡ °üÇÑ ÆÐÅÏÀ» ¼³¸íÇÕ´Ï´Ù. ÆÐÅÏÀÇ ³»¿ëÀ» ¼Ò°³ÇÏ´Â °Í¿¡¼ ±×Ä¡´Â °ÍÀÌ ¾Æ´Ï¶ó, ±× ÆÐÅÏ°ú °ü·ÃµÈ Java ¾ð¾îÀÇ ±â´É¿¡ ´ëÇؼµµ ¼Ò°³ÇÏ°í Àֱ⠶§¹®¿¡ Java ¾ð¾î¿¡ ´ëÇÑ ÀÌÇصµ ÇÔ²² ³ô¾ÆÁý´Ï´Ù.
2. Java ¾ð¾î ¿¹Á¦ ÇÁ·Î±×·¥
ÀÌ Ã¥¿¡¼ ´Ù·ç´Â ¸ðµç ÆÐÅÏ¿¡ ´ëÇÏ¿© Java ¾ð¾î·Î ÀÛ¼ºÇÑ ±¸Ã¼ÀûÀÎ ¿¹Á¦ ÇÁ·Î±×·¥À» ¼Ò°³ÇÏ°í ÀÖ½À´Ï´Ù. ¸·Èû¾øÀÌ ÀÐ¾î °¥ ¼ö ÀÖµµ·Ï ´ëºÎºÐÀÇ ¿¹Á¦ ÇÁ·Î±×·¥Àº ¸Å¿ì ª°Ô ±¸¼ºÇß½À´Ï´Ù. ±×·¯¸é¼µµ ¿¹Á¦ ÇÁ·Î±×·¥¿¡´Â »ý·«µÈ ºÎºÐÀÌ ¾ø±â ¶§¹®¿¡ ½ÇÁ¦·Î ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇØ º¼ ¼ö ÀÖ½À´Ï´Ù.
3. ÆÐÅÏ¸í¿¡ ´ëÇÑ ½¬¿î Çؼ³
ÀÌ Ã¥¿¡¼´Â ÆÐÅÏÀÇ ¿µ¾îÀ̸§ÀÌ °¡Áö´Â Àǹ̵µ ½±°Ô ¼³¸íÇÏ°í ÀÖ¾î Ãʺ¸ÀÚµµ ÆÐÅÏÀ» ½±°Ô ÀÌÇØÇÏ°í ¿Ü¿ï ¼ö ÀÖ½À´Ï´Ù.
4. ¿¬½À ¹®Á¦
°¢ Àå ¸¶Áö¸·¿¡´Â ¿¬½À¹®Á¦°¡ ³ª¿É´Ï´Ù. ±× Àå¿¡¼ ¹è¿î ³»¿ëÀ» ´õ¿í ¹ßÀü½ÃÅ°°í, ½ÇÁ¦ °³¹ßÇÒ ¶§ ÆÐÅÏÀ» Àû¿ëÇÏ·Á ÇÑ´Ù¸é ²À ¿¬½À¹®Á¦¸¦ Ç®¾îº¸±â ¹Ù¶ø´Ï´Ù. ºÎ·Ï CD¿¡ ¿¬½À¹®Á¦ÀÇ ÇØ´äµµ ½Æ°í ÀÖ½À´Ï´Ù.
5. java.util.concurrent ÆÐÅ°Áö ¼Ò°³
Java SE 5.0ºÎÅÍ ¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¥¿¡ ÀÌ¿ëÇϱâ Æí¸®ÇÑ java.util.concurrent ÆÐÅ°Áö°¡ Ç¥ÁØ ¶óÀ̺귯¸®¿¡ Ãß°¡µÆ½À´Ï´Ù. ÀÌ Ã¥ÀÇ °¢ Àå¿¡¼´Â java.util.concurrent ÆÐÅ°ÁöÀÇ ÁÖ¿ä Ŭ·¡½ºÀÇ »ç¿ë¹ýÀ» ¿¹Á¦ ÇÁ·Î±×·¥°ú ÇÔ²² ¼³¸íÇÏ°í ÀÖ½À´Ï´Ù.
* éÅͺ° ¿ä¾à
Chapter 01. Single Threaded Execution _ ÀÌ ´Ù¸®¸¦ °Ç³Î ¼ö ÀÖ´Â »ç¶÷Àº ¿ÀÁ÷ ÇÑ ¸í
¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀÇ °¡Àå ±âº»ÀûÀÎ ÆÐÅÏÀÎ Single Threaded Execution ÆÐÅÏÀ» °øºÎÇÕ´Ï´Ù. ÀÌ´Â ¾î¶°ÇÑ Ã³¸®¸¦ ½ÇÇàÇÏ´Â ¾²·¹µå°¡ ÇÑ °³»ÓÀÓÀ» º¸ÁõÇÏ´Â ÆÐÅÏÀÔ´Ï´Ù. ÀÌ ÆÐÅÏÀ» ÀÌ¿ëÇÔÀ¸·Î½á ÀνºÅϽº°¡ ºÎÁ¤ÇÕ »óÅ°¡ µÇ´Â °ÍÀ» ¹æÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ Java ¾ð¾î synchronized¿¡ ´ëÇؼµµ ½Éµµ ÀÖ°Ô °øºÎÇϸç, °è¼ö ¼¼¸¶Æ÷¾î java.util.concurrent.SemaphoreÀÇ ¿¹Á¦ ÇÁ·Î±×·¥À» ¸¸µé¾î º¾´Ï´Ù.
Chapter 02. Immutable _ ¸Á°¡¶ß¸®°í ½Í¾îµµ ¸Á°¡ÁöÁö ¾Ê´Â´Ù
ÀÏ´Ü ÀνºÅϽº°¡ »ý¼ºµÈ ´ÙÀ½¿¡´Â ±× ÀνºÅϽºÀÇ ³»¿ëÀÌ Àý´ë ¹Ù²îÁö ¾Ê´Â Immutable ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀ» »ç¿ëÇϸé ÀνºÅϽº°¡ ºÎÁ¤ÇÕ »óÅ°¡ µÇ°Å³ª ÇÏÁö ¾Ê±â ¶§¹®¿¡ ¹èŸÁ¦¾î¸¦ ÇÒ ÇÊ¿ä°¡ ¾ø¾îÁö°í ¼öÇà ´É·ÂÀ» ³ôÀÏ ¼ö ÀÖ½À´Ï´Ù. Java ¾ð¾î finalÀÇ Àǹ̿¡ ´ëÇؼµµ »ìÆ캾´Ï´Ù. Collections. synchronizedList ¹× java.util.concurrent.CopyOnWriteArrayList ¿¹Á¦ ÇÁ·Î±×·¥µµ ÀÛ¼ºÇÕ´Ï´Ù.
Chapter 03. Guarded Suspension_ Áغñ°¡ µÉ ¶§±îÁö ±â´Ù·Á ÁÖ¼¼¿ä
ÀνºÅϽº°¡ ±â´ëÇÏ´Â »óȲÀÌ ¸¸µé¾îÁö±â Àü±îÁö´Â ¾²·¹µå°¡ ¸Þ¼Òµå¸¦ ½ÇÇàÇÏÁö ¾Êµµ·Ï ¹æÁöÇÏ´Â Guarded Suspension ÆÐÅÏ¿¡ ´ëÇؼ °øºÎÇÕ´Ï´Ù. ÀÌ ÆÐÅϵµ ÀνºÅϽºÀÇ ¾ÈÀü¼ºÀ» º¸ÀåÇϴµ¥ ¾²ÀÔ´Ï´Ù. Java ¾ð¾îÀÇ wait ¸Þ¼Òµå¿Í notifyAll ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀ» ¿¬½ÀÇϸç, ºí·ÏÇϴ ť(Queue) java.util.concurrent.LinkedBlockingQueue ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µé¾î º¾´Ï´Ù.
Chapter 04. Balking _ ÇÊ¿ä ¾øÀ¸¸é °üµÖ¿ä
ÀνºÅϽº°¡ ±â´ëÇÏ´Â »óÅ°¡ ¸¸µé¾îÁöÁö ¾ÊÀ¸¸é ¸Þ¼ÒµåÀÇ ½ÇÇàÀ» Áß´ÜÇÏ´Â Baking ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀ¸·Î ºÒÇÊ¿äÇÑ ±â´Ù¸²À̳ª °úµµÇÑ ¸Þ¼ÒµåÀÇ ½ÇÇàÀ» ¸·À» ¼ö ÀÖ½À´Ï´Ù.
Chapter 05. Producer_Consumer _ ³»°¡ ¸¸µé°í ´ç½ÅÀÌ »ç¿ëÇÑ´Ù
º¹¼öÀÇ ¾²·¹µå°¡ Çù·ÂÇÏ¿© µ¿ÀÛÇÏ´Â Producer_Consumer ÆÐÅÏ¿¡ ´ëÇؼ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀ» »ç¿ëÇÏ¸é µ¥ÀÌÅ͸¦ ¸¸µå´Â ¾²·¹µå¿Í »ç¿ëÇÏ´Â ¾²·¹µå°¡ Ãæµ¹¾øÀÌ º´Çà µ¿ÀÛÇÕ´Ï´Ù. ºí·ÏÇϴ ť(Queue) java.util.concurrent.ArrayBlockingQueueÀÇ ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µì´Ï´Ù.
Chapter 06. Read_Write Lock _ ´Ù °°ÀÌ Àд °ÍÀº »ó°ü¾øÁö¸¸ Àд Áß°£¿¡ ¾²¸é ¾ÈµÅ¿ä
À¯¿¬ÇÑ ¹èŸ Á¦¾î¸¦ ½ÇÇàÇÏ´Â Read_Write Lock ÆÐÅÏ¿¡ ´ëÇؼ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀ» ÀÌ¿ëÇÏ¸é µ¥ÀÌÅ͸¦ ¾²´Â ¾²·¹µå´Â Çϳª¹Û¿¡ µ¿ÀÛÇÒ ¼ö ¾øÁö¸¸, µ¥ÀÌÅ͸¦ Àд ¾²·¹µå´Â º¹¼ö µ¿ÀÛÀÌ °¡´ÉÇØÁý´Ï´Ù. ÀÌ ÆÐÅÏÀ¸·Î ÀüüÀûÀÎ ¼öÇà ´É·ÂÀ» Çâ»ó½Ãų ¼ö ÀÖ½À´Ï´Ù. java.util.concurrent.locks.ReentrantReadWriteLock ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µì´Ï´Ù.
Chapter 07. Thread_Per_Message _ ÀÌ ÀÏÀ» ºÎŹÇØ¿ä
󸮸¦ ´Ù¸¥ ¾²·¹µå¿¡ ¸Ã±â´Â Thread_Per_Message ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀ» »ç¿ëÇÏ¸é º°µµÀÇ ¾²·¹µå¿¡ ÀÛ¾÷À» ¸Ã±â°í, »ç¿ëÀÚ´Â ¹Ù·Î ´ÙÀ½ ÀÛ¾÷À» ÁøÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÆÐÅÏÀ¸·Î ÇÁ·Î±×·¥ÀÇ ÀÀ´ä¼ºÀ» Çâ»ó½Ãų ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ Java ¾ð¾î ³»ºÎ Ŭ·¡½ºÀÇ »ç¿ë¹ýÀ» °øºÎÇÕ´Ï´Ù. java.util.concurrent ÆÐÅ°ÁöÀÇ ExecutorÀ̳ª ExecutorServeiceÀÇ ¿¹Á¦ ÇÁ·Î±×·¥µµ ÀÛ¼ºÇÕ´Ï´Ù.
Chapter 08. Worker Thread _ ÀÏÀÌ ¿Ã ¶§±îÁö ±â´Ù¸®°í, ÀÏÀÌ ¿À¸é ÀÛ¾÷ÇÑ´Ù
º¹¼öÀÇ ¾²·¹µå¸¦ ´ë±â½ÃÅ°°í ó¸®ÇØ¾ß ÇÒ ÀÛ¾÷À» ¼ø¼´ë·Î ½ÇÇàÇÏ´Â Worker Thread ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀ» »ç¿ëÇÏ¸é ¾²·¹µå »ý¼º ÄÚ½ºÆ®¸¦ ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ´ë±âÇÏ°í ÀÖ´Â ¾²·¹µåÀÇ ¼ö¸¦ Á¶ÀýÇÏ¿© ÀÌ¿ëÇÏ´Â ¸®¼Ò½ºÀÇ ¾çÀ» Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. AWT³ª Swing(JFC) ¾²·¹µåÀÇ »ç¿ë¹ý¿¡ ´ëÇؼµµ ¹è¿ó´Ï´Ù. ¾²·¹µå Ç®À» java.util.concurrent ÆÐÅ°Áö¿¡¼ »ç¿ëÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µì´Ï´Ù.
Chapter 09. Future _ ¸ÕÀú ±³È¯±ÇÀ» ¹ÞÀ¸¼¼¿ä
´Ù¸¥ ¾²·¹µå¿¡ ¸Ã°å´ø ÀÛ¾÷ÀÇ °á°ú¸¦ µ¿±âÀûÀ¸·Î ¹Þ¾ÆµéÀÌ´Â Future ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ÀÌ ÆÐÅÏÀº ºñµ¿±âÀûÀÎ ¸Þ¼Òµå È£ÃâÀ» ¸¸µé ¶§ µµ¿òÀÌ µË´Ï´Ù. ¶ÇÇÑ java.util.concurrent, Future, FutureTask, CallableÀÇ ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µì´Ï´Ù.
Chapter 10. Two_Phase Termination _ µÞÁ¤¸®¸¦ ÇÏ°í ³ª¼ ÀÚµµ·Ï ÇØ¿ä
¾²·¹µå¸¦ Á¾·á½ÃÅ°´Â Two_Phase Termination ÆÐÅÏ¿¡ ´ëÇØ °øºÎÇÕ´Ï´Ù. ÀÌ ÆÐÅÏÀ» »ç¿ëÇϸé ÀûÀýÇÏ°Ô Á¾·á 󸮸¦ ÇÏ°í ³ª¼ ¾²·¹µå¸¦ ¾ÈÀüÇÏ°Ô ¸¶Ä¥ ¼ö ÀÖ½À´Ï´Ù. ¾²·¹µåÀÇ ÀÎÅÍ·´Æ®¿¡ ´ëÇؼµµ ¹è¿ó´Ï´Ù. java.util.concurrent ÆÐÅ°Áö CountDownLatch, CyclicBarrierÀÇ ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µì´Ï´Ù.
Chapter 11. Thread_Specific Storage _ ¾²·¹µå¸¶´Ù ¶ôÄ¿¸¦ °¡Áø´Ù
¾²·¹µåº°·Î º¯¼ö ¿µ¿ªÀ» È®º¸ÇÏ´Â Thread_Specific Storage ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ¸ÖƼ ¾²·¹µå¶ó ÇÏ´õ¶óµµ º¯¼ö ¿µ¿ªÀÌ ¿ÏÀüÈ÷ ºÐ¸®µÇ¾î Àֱ⠶§¹®¿¡ ¹èŸÁ¦¾îÀÇ Çʿ伺ÀÌ »ç¶óÁý´Ï´Ù. java.lang.ThreadLocal Ŭ·¡½ºÀÇ »ç¿ë¹ýµµ ¹è¿ó´Ï´Ù.
Chapter 12. Active Object _ ºñµ¿±â ¸Þ½ÃÁö¸¦ ¸ÂÀÌÇÏ´Â ´Éµ¿ÀûÀÎ °´Ã¼
ÀÚÀ²ÀûÀ¸·Î µ¿ÀÛÇÏ´Â °´Ã¼¸¦ ¸¸µå´Â Active Object ÆÐÅÏ¿¡ ´ëÇØ ¹è¿ó´Ï´Ù. ÀÌ °´Ã¼´Â ¿ÜºÎÀÇ ¸Þ½ÃÁö¸¦ ¹Þ¾ÆµéÀÌ°í ±×°ÍÀ» ÀÚ½ÅÀÇ ¾²·¹µå¸¦ ÀÌ¿ëÇØ ½ÇÇàÇÕ´Ï´Ù. ÀÌ ÆÐÅÏÀ» »ç¿ëÇÏ¸é ¸Þ¼ÒµåÀÇ È£Ãâ°ú ½ÇÇàÀÌ ºÐ¸®µË´Ï´Ù. java.util.concurrent ÆÐÅ°ÁöÀÇ Å¬·¡½º¸¦ »ç¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥µµ ¸¸µì´Ï´Ù. |