IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

Java theory and practice : ³» ¾²·¹µå´Â ¾îµð¿¡?
¼­¹ö ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¾²·¹µå À¯Ãâ ÇÇÇϱâ

Level: Áß±Þ

Brian Goetz
Principal Consultant, Quiotix Corp
2002³â 9¿ù

Column iconÁÖÀǸ¦ ±â¿ïÀÌÁö ¾ÊÀ¸¸é ¾²·¹µå´Â ¾Æ¹«·± ÈçÀûµµ ¾øÀÌ ¼­¹ö ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ »ç¶óÁú ¼ö ÀÖ´Ù. ¾²·¹µù Àü¹®°¡ Brian Goetz´Â ¾²·¹µå ÀÌÅ» ¹æÁö ¹× °¨½Ã ±â¼úÀ» Á¦°øÇÑ´Ù.

½Ì±Û ¾²·¹µå ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÁÖ ¾²·¹µå°¡ ÀâÈ÷Áö ¾ÊÀº ¿¹¿Ü¸¦ ´øÁú ¶§ ½ºÅà Ʈ·¹À̽º°¡ ÄÜ¼Ö»ó¿¡ ÇÁ¸°Æ® µÇ´Â °ÍÀ» ÅëÇØ ¾Ë°Ô µÈ´Ù. ÇÏÁö¸¸ ¸ÖƼ¾²·¹µå ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ƯÈ÷ ¼­¹ö·Î¼­ ½ÇÇàµÇ°í Äֿܼ¡ ¾îÅÂÄ¡ µÇÁö ¾ÊÀº ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì ¾²·¹µåÀÇ ¼Ò½ÇÀº ¾Ë·ÁÁú ¼ö ¾ø´Â À̺¥Æ®°¡ µÇ¾î ¾ÖÇø®ÄÉÀÌ¼Ç ÀÛµ¿À» È¥µ·½ÃŰų ¼ö ÀÖ´Â ºÎºÐÀûÀÎ ½Ã½ºÅÛ °íÀåÀ» ÀÏÀ¸Å²´Ù.

7¿ù Java theory and practice ¿¡¼­, ¾²·¹µå Ç®(thread pool)À» ´Ù·ð´Ù. ºÎÀûÀýÇÏ°Ô ÀÛ¼ºµÈ ¾²·¹µå Ç®ÀÌ ¾²·¹µå¸¦ ¾î¶»°Ô À¯Ãâ½ÃÅ°´ÂÁö¸¦ °ËÅäÇß´Ù. ´ëºÎºÐÀÇ ¾²·¹µå Ç® ±¸ÇöÀº ´øÁ®Áø ¿¹¿Ü¸¦ Àâ°í Á×Àº ¾²·¹µå¸¦ Àç½ÃÀÛÇÏ´Â °ÍÀ¸·Î À¯ÃâÀ» º¸È£ÇÏ·Á ÇÑ´Ù. ÇÏÁö¸¸ ¾²·¹µå À¯ÃâÀÇ ¹®Á¦´Â ¾²·¹µå Ç®¿¡ Á¦ÇѵÇÁö ¾Ê´Â´Ù. ¼­ºñ½º ÀÛ¾÷ Å¥¿¡ ¾²·¹µå¸¦ »ç¿ëÇÏ´Â ¼­¹ö ¾ÖÇø®ÄÉÀ̼ǵµ ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇÇÇÒ ¼ö ¾ø´Ù. ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¿öÄ¿(worker) ¾²·¹µå¸¦ ÀÒÀ» ¶§ ¾ÖÇø®ÄÉÀ̼ÇÀº Àá½Ãµ¿¾È ÀÛ¾÷ÀÌ Àß ÁøÇàµÇ´Â °Í ó·³ º¸ÀÌ°Ô Çϸ鼭 ¹®Á¦ÀÇ ÁøÂ¥ ¿øÀÎÀº È®ÀÎÇϱâ Èûµé°Ô ¸¸µç´Ù.

¸¹Àº ¾ÖÇø®ÄÉÀ̼ǵéÀº ¹é±×¶ó¿îµå ¼­ºñ½º¸¦ Á¦°øÇÏ´Â µ¥¿¡ ¾²·¹µå¸¦ »ç¿ëÇÏ¿© ¹é±×¶ó¿îµå ¼­ºñ½º¸¦ Á¦°øÇÑ´Ù. À̺¥Æ® Å¥¿¡¼­ ŽºÅ©¸¦ ÇÁ·Î¼¼½ÌÇÏ°í ¼ÒÄÏÀÇ ¸í·É¾î¸¦ Àаųª UI ¾²·¹µå ¹Û¿¡¼­ Àå±â ½ÇÇà ŽºÅ©¸¦ ¼öÇàÇÑ´Ù.

°¡²û¾¿ »ç¿ëÀÚµéÀº ¾î¶² Àϵµ ¹ß»ýÇÏÁö ¾Ê´Â °Í ó·³ ´À³¤´Ù. ¿¹¸¦ µé¾î ½ºÆç üŷ °°ÀÌ »ç¿ëÀÚ¿¡ ÀÇÇÑ Àå±â ¾²·¹µå ½ÇÇà ŽºÅ©¸¦ ¼öÇàÇϰųª ¿ÀÆÛ·¹ÀÌ¼Ç ¶Ç´Â ÇÁ·Î±×·¥À» ¸ØÃâ °æ¿ìÀÌ´Ù. ÇÏÁö¸¸ ´ëºÎºÐÀº ¹é±×¶ó¿îµå ¾²·¹µå´Â Á¤¸®ÀÛ¾÷À» ¼öÇàÇÏ°í ±×µéÀÇ ÀÇÁ¸¼º ¶§¹®¿¡ ¿À·§µ¿¾È ¾Ë ¼ö°¡ ¾ø´Ù.

¿¹Á¦ ¼­¹ö ¾ÖÇø®ÄÉÀ̼Ç
°¡»óÀÇ ¹Ìµé¿þ¾î ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ» »ý°¢Çغ¸ÀÚ. ´Ù¾çÇÑ ÀÎDz ¼Ò½º·ÎºÎÅÍ ¸Þ½ÃÁöµéÀ» ¸ðÀ¸°í ±×µéÀ» ¿ÜºÎ ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î º¸³»°í ¿ÜºÎ ¼­¹ö¿¡¼­ ÀÀ´äÀ» ¹Þ¾Æ ±×°ÍÀ» ´Ù½Ã Àû´çÇÑ ÀÎDz ¼Ò½º·Î ¶ó¿ìÆÃÇÑ´Ù. °¢ ÀÎDz ¼Ò½ºÀÇ °æ¿ì °íÀ¯ÀÇ ¹æ½ÄÀ¸·Î ÀÎDz ¸Þ½ÃÁö¸¦ ¹Þ´Â Ç÷¯±×ÀÎÀÌ ÀÖ´Ù. ÆÄÀÏÀÇ µð·ºÅ丮 ½ºÄ³´×, ¼ÒÄÏ ¿¬°áÀ» ±â´Ù¸®±â, µ¥ÀÌÅÍ º£À̽º µî·Ï ÀÛ¾÷À» ÇÑ´Ù. ÀÌ Ç÷¯±×ÀÎÀº JVM ¼­¹ö¿¡¼­ ½ÇÇàµÈ´Ù ÇÏ´õ¶óµµ Á¦ 3ÀÚ¿¡ ÀÇÇØ ÀÛ¼ºµÈ´Ù. ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀº Àû¾îµµ µÎ °³ÀÇ ³»ºÎ ÀÛ¾÷ Å¥¸¦ °¡Áö°í ÀÖ´Ù (Ç÷¯±×Àο¡¼­ ¹ÞÀº ¸Þ½ÃÁö´Â ¼­¹ö·Î Àü¼ÛµÇ±â¸¦ ±â´Ù¸®°í ÀÖ°í ¼­¹ö¿¡¼­ ¹ÞÀº ÀÀ´äµéÀº ÀûÀýÇÑ Ç÷¯±×ÀÎÀ¸·Î Àü¼ÛµÇ±â¸¦ ±â´Ù¸°´Ù). ¸Þ½ÃÁöµéÀº ¼­ºñ½º ·çƾÀÎ incomingResponse()¸¦ Ç÷¯±×ÀÎ °´Ã¼»ó¿¡¼­ È£ÃâÇÔÀ¸·Î¼­ ¿ø·¡ Ç÷¯±×ÀÎÀ¸·Î ¶ó¿ìÆõȴÙ.

Ç÷¯±×Àο¡¼­ ¸Þ½ÃÁö¸¦ ¹ÞÀº ÈÄ¿¡ ÀÌ ¸Þ½ÃÁöµéÀº ¾Æ¿ô°íÀ×(outgoing) ¸Þ½ÃÁö Å¥·Î ´ë±âÇÑ´Ù. ¾Æ¿ô°íÀ× ¸Þ½ÃÁö Å¥¿¡¼­ ¹ÞÀº ¸Þ½ÃÁö´Â Çϳª ÀÌ»óÀÇ ¾²·¹µå·Î 󸮵ȴÙ. ÀÌ ¾²·¹µå´Â Å¥·Î ºÎÅÍ ¿Â ¸Þ½ÃÁö¸¦ ÀÐ°í ¼Ò½º¸¦ ±â·ÏÇÏ°í ÀÌ°ÍÀ» ¿ø°Ý ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î º¸³½´Ù. ¿ø°Ý ¾ÖÇø®ÄÉÀ̼ÇÀº À¥ ¼­ºñ½º ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ÀÀ´äÇÏ°í ¼­¹ö´Â ¹ÞÀº ÀÀ´äµéÀ» ÀÎÄ¿¹Ö ÀÀ´ä Å¥·Î ´ë±â½ÃŲ´Ù. Çϳª ÀÌ»óÀÇ ÀÀ´ä ¾²·¹µå´Â ÀÎÄ¿¹Ö ÀÀ´ä Å¥¿¡¼­ ¸Þ½ÃÁö¸¦ ÀÐ°í ±×µéÀ» ÀûÀýÇÑ Ç÷¯±×ÀÎÀ¸·Î ¶ó¿ìÆÃÇϸ鼭 ¸ðµç ÇÁ·Î¼¼½º¸¦ ³¡³½´Ù.

ÀÌ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¿ì¸®´Â µÎ °³ÀÇ ¸Þ½ÃÁö Å¥(¾Æ¿ô°íÀ× ¿äû°ú ÀÎÄ¿¹Ö ÀÀ´ä)¸¦ °¡Áö°Ô µÈ´Ù. ±×¸®°í ¾Æ¸¶µµ ´Ù¾çÇÑ Ç÷¯±×ÀÎ ¾È¿¡´Â Ãß°¡ Å¥ µéµµ ÀÖÀ» °ÍÀÌ´Ù. ¿ì¸®´Â ¶ÇÇÑ ¿©·¯°¡ÁöÀÇ ¼­ºñ½º ¾²·¹µå¸¦ °¡Áö°í Àִµ¥ ¾Æ¿ô°íÀ× ¸Þ½ÃÁö Å¥¿¡¼­ ¿äûÀ» ÀÐ¾î ±×µéÀ» ¿ÜºÎ ¼­¹ö·Î º¸³»´Â ¾²·¹µå¿Í ÀÎÄ¿¹Ö ÀÀ´ä Å¥¿¡¼­ ÀÀ´äÀ» ÀÐ¾î ±×µéÀ» Ç÷¯±×ÀÎÀ¸·Î ¶ó¿ìÆÃÇÏ´Â ¾²·¹µå°¡ ÀÖ´Ù.

¾²·¹µå ¼Ò½ÇÀÌ ¸í¹éÇÏÁö ¾Ê´Ù!
ÀÌµé ¾²·¹µå Áß ÀÀ´äÀ» º¸³»´Â ¾²·¹µå°¡ »ç¶óÁø´Ù¸é? Ç÷¯±×ÀÎÀÌ »õ·Î¿î ¸Þ½ÃÁö¸¦ º¸³¾ ¼ö Àֱ⠶§¹®¿¡ À߸øµÇ°í ÀÖ´Ù´Â »ç½ÇÀ» Áï½Ã ÀνÄÇÏÁö ¸øÇÑ´Ù. ¸Þ½ÃÁöµéÀº ´Ù¾çÇÑ ÀÎDz ¼Ò½º¸¦ ÅëÇØ µµÂøÇÏ°í ¶ÇÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÅëÇØ ¿ÜºÎ ¼­¹ö·Î º¸³»Áø´Ù. Ç÷¯±×ÀÎÀÌ ÀÀ´äÀ» Áï½Ã ±â´ëÇÏ°í ÀÖÁö ¾Ê±â ¶§¹®¿¡ ¹®Á¦°¡ ÀÖ´Ù´Â °Í ¿ª½Ã ¾Ë ¼ö ¾ø´Ù. °á±¹ ¹ÞÀº ÀÀ´äÀº ´ë±â°¡ ±æ¾îÁö°Ô µÈ´Ù. ±×µéÀÌ ¸Þ¸ð¸®¿¡ ÀúÀåµÇ¾î ÀÖ´Ù¸é ¸Þ¸ð¸®´Â ¼ÒÁøµÉ °ÍÀÌ´Ù. ±×·¸Áö ¾Ê´õ¶óµµ ¾î´À ½ÃÁ¡¿¡¼­ ´©±º°¡°¡ ÀÀ´äÀÌ Àü¼ÛµÇÁö ¾Ê¾Ò´Ù´Â °ÍÀ» ÀνÄÇÏ°ÚÁö¸¸ ¿À·£ ½Ã°£ÀÌ Áö³­ ´ÙÀ½ÀÌ´Ù. ¿Ö³ÄÇÏ¸é ½Ã½ºÅÛÀÇ ´Ù¸¥ Ãø¸éµéÀº Á¤»óÀûÀ¸·Î ÀÛµ¿Çϱ⠶§¹®ÀÌ´Ù.

ÁÖ Å½ºÅ© Çڵ鸵 Ãø¸éÀÌ ½Ì±Û ¾²·¹µå°¡ ¾Æ´Ñ ¾²·¹µå Ç®·Î ÇÚµé µÉ ¶§ °©ÀÛ½º·¯¿î ¾²·¹µå À¯Ãâ °á°ú¿¡ ´ëÇØ ¾î´À Á¤µµ È®½ÇÇÑ º¸ÀåÀÌ ÀÖ´Ù. ¿©´ü °³ÀÇ ¾²·¹µå·Î Àß ¼öÇàµÇ´Â ¾²·¹µå Ç®Àº ÀÏ°ö °³·Îµµ ÀÛ¾÷À» ¼öÇàÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. ¿ì¼± ÀνÄÇÒ ¼ö ÀÖ´Â Â÷ÀÌÁ¡ÀÌ ¾ø´Ù. °á±¹ ¹Ì¹¦ÇÑ ¹æ½ÄÀ¸·Î ½Ã½ºÅÛ ÆÛÆ÷¸Õ½º´Â ¶³¾îÁø´Ù.

¼­¹ö ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¾²·¹µå À¯Ãâ ¹®Á¦´Â ¿ÜºÎ¿¡¼­´Â ½±°Ô °¨ÁöµÉ ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ´ëºÎºÐÀÇ ¾²·¹µå´Â ¼­¹ö ¿öÅ©·ÎµåÀÇ ¾î´À ÇÑ ºÎºÐ¸¸À» ÇÚµéÇϰųª ƯÁ¤ À¯ÇüÀÇ ¹é±×¶ó¿îµå ŽºÅ©¸¦ ÇÚµéÇϱ⠶§¹®¿¡ ½É°¢ÇÑ ¿À·ù¿¡ óÇØ ÀÖ´õ¶óµµ ÇÁ·Î±×·¥Àº »ç¿ëÀÚ¿¡°Ô ±â´ÉÀûÀ¸·Î ÀÌ»óÀÌ ¾ø´Â °ÍÀ¸·Î º¸ÀÏ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®Á¦´Â ¾²·¹µå À¯ÃâÀÌ Ç×»ó Áõ°Å¸¦ ³²±âÁö ¾Ê´Â ´Ù´Â »ç½Ç°ú ´õºÒ¾î ¾ÖÇø®ÄÉÀÌ¼Ç ÀÛµ¿À» ¾î·Æ°Ô ¸¸µå´Â ¿äÀÎÀÌ µÈ´Ù.

RuntimeExceptionÀº¾²·¹µå ¼Ò½ÇÀÇ ¿øÀÎÀÌ µÈ´Ù!
¾²·¹µå´Â ÀâÈ÷Áö ¾Ê´Â ¿¹¿Ü³ª ¿¡·¯¸¦ ÁÙ ¶§ »ç¸®Áú ¼ö ÀÖ´Ù. ¶Ç´Â ÀüÇô ¿Ï·áµÇÁö ¾ÊÀ» I/O ÀÛµ¿À» ±â´Ù¸®°Å³ª ¾î¶² ´©±¸µµ notify()¸¦ È£ÃâÇÏÁö ¾Ê´Â ´Ù´Â °ÍÀ» ¸ð´ÏÅ͸µ ÇÒ ¶§ ÀÛµ¿À» ¸ØÃá´Ù. ¿¹ÃøÇÏÁö ¸øÇÑ ¾²·¹µå ¼Ò½ÇÀÇ °¡Àå ÀϹÝÀûÀÎ ¿äÀÎÀº RuntimeException À» ´øÁú ¶§ÀÌ´Ù. ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ RuntimeException ÀÌ ÁÖ¾îÁú ÇÑ Àå¼Ò´Â Ç÷¯±×ÀÎ °´Ã¼»ó¿¡¼­ incomingResponse() ¸¦ È£ÃâÇÏ¿© Ç÷¯±×ÀÎÀ¸·Î ´Ù½Ã ÀÀ´äÀÌ ³Ñ°ÜÁö°Ô µÈ´Ù. Ç÷¯±×ÀÎ ÄÚµå´Â Á¦ »ïÀÚ¿¡ ÀÇÇØ ÀÛ¼ºµÇ¾ú°Å³ª ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÛ¼ºµÈ ÈÄ¿¡ ÀÛ¼ºµÇ¾ú´Ù. µû¶ó¼­ ¾ÖÇø®ÄÉÀÌ¼Ç ÀÛ¼ºÀÚ°¡ À߸øÀ» °Ë»çÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. Ç÷¯±×ÀÎÀÌ RuntimeException¸¦ ´øÁú ¶§ ÀÀ´ä ¼­ºñ½º ¾²·¹µå°¡ Á¾·áÇÑ´Ù¸é ÀÌ°ÍÀº ¿À·ù°¡ ³óÈÄÇÑ Ç÷¯±×ÀÎÀÌ Àüü ½Ã½ºÅÛÀ» ´Ù¿î½Ãų ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ·¯ÇÑ Ãë¾àÁ¡ÀÌ ¸Å¿ì ÀϹÝÀûÀ̶ó´Â °ÍÀº ºÒÇàÇÑ ÀÏÀÌ´Ù.

üũµÈ ¿¹¿Ü¿¡ ´ëÇØ Àû±ØÀûÀ¸·Î ÄÚµùÇÏ°ÚÁö¸¸ üũµÇÁö ¾ÊÀº ¿¹¿Ü´Â ÀÚ¹Ù °³¹ßÀڵ鿡 ÀÇÇØ ¹«½Ã´çÇÒ °ÍÀÌ´Ù. ½Ì±Û ¾²·¹µå ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÇÚµéµÇÁö ¾ÊÀº RuntimeExceptionÀÇ °á°ú´Â ¸íÈ®ÇÏ´Ù. ±×¸®°í ÀÌ°ÍÀÌ ¹ß»ýÇÏ´Â °÷¿¡ ¸íÈ®ÇÑ ½ºÅà Ʈ·¹À̽º°¡ ÀÖ´Ù. ÀÌ´Â ¹®Á¦¸¦ ¾Ë·ÁÁÙ »Ó´õ·¯ À̸¦ ÇØ°áÇÒ À¯¿ëÇÑ Á¤º¸µµ Á¦°øÇÑ´Ù. ÇÏÁö¸¸ ¸ÖƼ¾²·¹µå ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¾²·¹µå´Â üũµÇÁö ¾ÊÀº ¿¹¿Ü ¶§¹®¿¡ Á¶¿ëÈ÷ ¾ø¾îÁø´Ù. »ç¿ëÀÚµé°ú °³¹ßÀÚµéÀº ±× ¿øÀκÎÅÍ Ã£¾Æ¾ß ÇÑ´Ù.

¿ì¸®ÀÇ ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¿äû/ÀÀ´ä Çڵ鷯 ¾²·¹µå °°Àº ŽºÅ© ÇÁ·Î¼¼½Ì ¾²·¹µå´Â ±âº»ÀûÀ¸·Î °ÅÀÇ ¸ðµç ½Ã°£À» Runnable °°Àº Ãß»ó ¹è¸®¾î¸¦ ÅëÇØ ¼­ºñ½º ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. Ãß»ó ¹è¸®¾îÀÇ ´Ù¸¥ ºÎºÐ¿¡ ¾î¶² °ÍÀÌ ÀÖ´ÂÁö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ ¼­ºñ½º ·çƾÀÌ RuntimeExceptionÀ» ´øÁö¸é È£Ãâ ¾²·¹µå´Â ÀÌ°ÍÀ» ã¾Æ ±â·ÏÇÏ°í Å¥ÀÇ ´ÙÀ½ ¾ÆÀÌÅÛÀ¸·Î ¿Å±â°Å³ª ¾²·¹µå¸¦ ´Ù¿î½ÃÅ°°í À̸¦ Àç½ÃÀÛÇÑ´Ù.

Listing 1ÀÇ ÄÚµå´Â ÀÛ¾÷ Å¥¿¡¼­ Runnable ŽºÅ©¸¦ ó¸®ÇÏ´Â ¾²·¹µåÀÇ ÀüÇüÀÌ´Ù. üũµÇÁö ¾ÊÀº ¿¹¿Ü¸¦ ´øÁö´Â Ç÷¯±×ÀÎÀ» °¨½ÃÇÏÁö ¾Ê´Â´Ù.

Listing 1. RuntimeException¸¦ °¨½ÃÇÏÁö ¾Ê´Â worker ¾²·¹µå

private class TrustingPoolWorker extends Thread {
    public void run() {
        IncomingResponse ir;

        while (true) {
            ir = (IncomingResponse) queue.getNext();
            PlugIn plugIn = findPlugIn(ir.getResponseId());
            if (plugIn != null)
                plugIn.handleMessage(ir.getResponse());
            else
                log("Unknown plug-in for response " + ir.getResponseId());
        }
    }
}

ÀÌ worker ¾²·¹µå°¡ ½ÇÆп¡ ´ëÇØ ´õ¿í °­ÇØÁöµµ·Ï ¸¹Àº Äڵ带 Ãß°¡ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. RuntimeExceptionÀ» Àâ°í ±×·±´ÙÀ½ Á¤Á¤ ÀÛ¾÷À» ÇÔÀ¸·Î¼­ Àüü ¼­¹ö¿¡ Çظ¦ ³¢Ä¡´Â ¾î¼³ÇÁ°Ô ÀÛ¼ºµÈ Ç÷¯±×ÀÎÀ¸·Î ºÎÅÍ º¸È£ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀûÀýÇÑ Á¤Á¤ ÀÛ¾÷Àº ¿¡·¯¸¦ ±â·ÏÇÏ°í ´ÙÀ½ ¸Þ½ÃÁö·Î À̵¿½ÃÅ°°í ÇöÀç ¾²·¹µå¸¦ Á¾·áÇÏ°í À̸¦ Àç½ÃÀÛÇϰųª ¹®Á¦¸¦ ÀÏÀ¸Å°´Â Ç÷¯±×ÀÎÀ» ¾ð·ÎµùÇÏ´Â °ÍÀÌ´Ù. (Listing 2):

Listing 2. RuntimeExceptionÀ» °¨½ÃÇÏ´Â worker ¾²·¹µå

private class SaferPoolWorker extends Thread {
    public void run() {
        IncomingResponse ir;

        while (true) {
            ir = (IncomingResponse) queue.getNext();
            PlugIn plugIn = findPlugIn(ir.getResponseId());
            if (plugIn != null) {
                try {
                    plugIn.handleMessage(ir.getResponse());
                }
                catch (RuntimeException e) {
                    // Take some sort of action; 
                    // - log the exception and move on
                    // - log the exception and restart the worker thread
                    // - log the exception and unload the offending plug-in
                }
            }
            else
                log("Unknown plug-in for response " + ir.getResponseId());
        }
    }
}

ThreadGroupÀÌ Á¦°øÇÑ ÀâÈ÷Áö ¾ÊÀº ¿¹¿Ü Çڵ鷯 »ç¿ëÇϱâ
ThreadGroup Ŭ·¡½ºÀÇ uncaughtExceptionÀ» »ç¿ëÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. ThreadGroupÀº ±×´ÙÁö ¸¹ÀÌ À¯¿ëÇÏÁö ¾ÊÁö¸¸ uncaughtException ±â´ÉÀÌ ¹Ýµå½Ã ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Ù. Listing 3Àº ¾²·¹µå°¡ ÀâÈ÷Áö ¾ÊÀº ¿¹¿Ü·Î ¾ø¾îÁú ¶§ ThreadGroupÀ» »ç¿ëÇÏ¿© À̸¦ °¨ÁöÇÏ´Â ¿¹Á¦ÀÌ´Ù:

Listing 3. uncaughtExceptionÀ» »ç¿ëÇÏ¿© ¾²·¹µå ¼Ò½Ç ¾Ë¾Æ³»±â

public class ThreadGroupExample {

    public static class MyThreadGroup extends ThreadGroup {

        public MyThreadGroup(String s) {
            super(s);
        }

        public void uncaughtException(Thread thread, Throwable throwable) {
            System.out.println("Thread " + thread.getName() 
              + " died, exception was: ");
            throwable.printStackTrace();
        }
    }

    public static ThreadGroup workerThreads = 
      new MyThreadGroup("Worker Threads");

    public static class WorkerThread extends Thread {
        public WorkerThread(String s) {
            super(workerThreads, s);
        }

        public void run() {
            throw new RuntimeException();
        }

    }

    public static void main(String[] args) {
        Thread t = new WorkerThread("Worker Thread");
        t.start();
    }
}

ÀâÈ÷Áö ¾ÊÀº ¿¹¿Ü¸¦ ÁÖ¾ú±â ¶§¹®¿¡ thread groupÀÇ ¾²·¹µå°¡ ¾ø¾îÁø´Ù¸é thread groupÀÇ uncaughtException() ¸Þ¼Òµå°¡ È£ÃâµÈ´Ù. ÀÌ°ÍÀº ·Î±×¿¡ ¿£Æ®¸®¸¦ ÀÛ¼ºÇÏ°í ¾²·¹µå¿Í ½Ã½ºÅÛÀ» Àç½ÃÀÛÇÏ°í ÇÊ¿äÇÒ °æ¿ì Á¤Á¤ ¹× Áø´Ü ÀÛµ¿À» ÇÑ´Ù. ¾²·¹µå°¡ ¾ø¾îÁú ¶§ ¸ðµç ¾²·¹µå°¡ ·Î±× ¸Þ½ÃÁö¸¦ ÀÛ¼ºÇÑ´Ù¸é ¹«¾ùÀÌ À߸øµÇ¾ú´ÂÁö¿¡ ´ëÇÑ ±â·ÏÀ» °®°ÔµÈ´Ù.

¿ä¾à
¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¾²·¹µå°¡ »ç¶óÁö°í ¾²·¹µå°¡ ÈçÀû¾øÀÌ »ç¶óÁú ¶§ È¥¶õ½º·´´Ù. ¾²·¹µå À¯ÃâÀ» ¹æÁöÇÏ´Â ÃÖ»óÀÇ ¹æ¹ýÀº ¹æÁö¿Í °¨½ÃÀÇ Çùµ¿ÀÛ¿ëÀÌ´Ù.

Âü°íÀÚ·á

¸ñ Â÷:
¿¹Á¦
¾²·¹µå ¼Ò½ÇÀÌ ¸í¹éÇÏÁö ¾Ê´Ù!
¾²·¹µå ¼Ò½ÇÀÇ ¿øÀÎ
ÀâÈ÷Áö ¾ÊÀº ¿¹¿Ü Çڵ鷯 »ç¿ëÇϱâ
¿ä¾à
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
Multithreaded Java programming discussion forum
Thread pools and work queues
The Orphaned Thread bug pattern
Intro to Java threads
Java theory and practice columns
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ¼Ò°³
Brian Goetz´Â ¼ÒÇÁÆ®¿þ¾î ÄÁ¼³ÅÏÆ®À̸ç Áö³­ 15³â°£ Àü¹®ÀûÀÎ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ·Î ÀÏÇØ¿Ô´Ù. ±×´Â Ķ¸®Æ÷´Ï¾ÆÁÖ Los Altos ¼ÒÀç ¼ÒÇÁÆ®¿þ¾î °³¹ß ¹× ÄÁ¼³Æà ¾÷üÀÎ Quiotix»çÀÇ ¼ö¼® ÄÁ¼³ÅÏÆ®ÀÌ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ