»ý»êÀÚ-¼ÒºñÀÚ ÇàÀ§¸¦ °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â Consumer Ŭ·¡½º
Joseph
Hartal, ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ, GlobaLoop LTD Ze'ev
Bubis, ¼ÒÇÁÆ®¿þ¾î °³¹ßÆÀÀå, GlobaLoop LTD
2002³â 2¿ù
»ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À´Â ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ±¸¼º °³³ä Áß
ÇϳªÀÌ°í, ¿©±â¿¡ ¹®Á¦°¡ ÀÖ´Ù. »ý»êÀÚ-¼ÒºñÀÚ ÇàÀ§´Â ÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¿©·¯ ¹ø µÇÇ®ÀÌµÉ ¼ö Àֱ⠶§¹®¿¡
Äڵ嵵 ±×·¸°Ô µÉ ¼ö ÀÖ´Ù. ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚÀÎ Ze'ev Bubis¿Í Saffi Hartal´Â
Consumer Ŭ·¡½º¸¦ ¸¸µé¾ú´Âµ¥, ÀÌ Å¬·¡½º´Â ÀϺΠ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ǿ¡¼
ÄÚµå Àç»ç¿ëÀ» ¿ëÀÌÇÏ°Ô ÇÏ°í ÄÚµå µð¹ö±ë°ú À¯Áöº¸¼ö¸¦
°£ÆíÇÏ°Ô ÇÏ¿© ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á ÇÑ´Ù.
´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ÇÀº Á¾Á¾ »ý»êÀÚ-¼ÒºñÀÚ ÇÁ·Î±×·¡¹Ö ½Ã³ª¸®¿À¸¦ »ç¿ëÇÑ´Ù. ÀÌ ½Ã³ª¸®¿À¿¡¼´Â »ý»êÀÚ
½º·¹µå°¡ ¹Ýº¹ÀûÀÎ ÀÛ¾÷À» »ý¼ºÇÏ¿© ÀÛ¾÷ Å¥¿¡ º¸³»°í ¼ÒºñÀÚ ½º·¹µå°¡ À̸¦ óÇÑ´Ù. ÀÌ ÇÁ·Î±×·¡¹Ö ¸Þ¼Òµå´Â ¸Å¿ì
À¯¿ëÇÏÁö¸¸ Á¾Á¾ Áߺ¹µÈ Äڵ带 ¸¸µé¾î ³»±âµµ Çϴµ¥, ÀÌ´Â µð¹ö±ë°ú À¯Áöº¸¼ö¿¡ ½ÇÁúÀûÀÎ ¹®Á¦°¡ µÉ ¼ö
ÀÖ´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ°í ÄÚµå Àç»ç¿ëÀ» ¿øÇÒÇÏ°Ô Çϱâ À§ÇØ ¿ì¸®´Â Consumer
Ŭ·¡½º¸¦ ¸¸µé¾ú´Ù. Consumer Ŭ·¡½º´Â ÀÛ¾÷ Å¥¿Í ¼ÒºñÀÚ ½º·¹µå¸¦ À§ÇÑ ¸ðµç ÄÚµå»Ó
¾Æ´Ï¶ó À̵éÀ» ¿¬°á½ÃÅ°´Â ³í¸®Àû Á¢ÂøÁ¦¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ´Â ¿ì¸®°¡ Áߺ¹ÀûÀÎ ÄÚµåÀÇ ÇàµéÀ» ÀÛ¼ºÇÏ´Â ´ë½Å
ºñÁî´Ï½º ·ÎÁ÷ - ÀÛ¾÷ÀÌ ¾î¶»°Ô 󸮵Ǿî¾ß ÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÏ´Â °Í-¿¡ Æ÷Ä¿½º¸¦ ¸ÂÃâ ¼ö ÀÖµµ·Ï ÇØ ÁØ´Ù. ¶ÇÇÑ
´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ÇÀÇ µð¹ö±ë ÀÛ¾÷À» ÈξÀ ½±°Ô ÇØÁØ´Ù.
ÀÌ ±Û¿¡¼ ¿ì¸®´Â ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼ ÀϹÝÀûÀÎ ½º·¹µå »ç¿ë¿¡ °üÇØ °£´ÜÈ÷ »ìÆ캸°í
»ý»êÀÚ-¼ÒºñÀÚ ÇÁ·Î±×·¡¹Ö ½Ã³ª¸®¿À¿¡ °üÇØ ¼³¸íÇÏ°í Consumer Ŭ·¡½º°¡ ¾î¶»°Ô
ÀÛµ¿ÇÏ´ÂÁö¸¦ º¸¿©ÁÖ´Â ½ÇÁ¦ ¼¼°èÀÇ ¿¹¸¦ °ËÅäÇÏ°Ú´Ù. ÀÌ ±ÛÀº ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀ̳ª »ý»êÀÚ-¼ÒºñÀÚ
½Ã³ª¸®¿À¿¡ ´ëÇÑ ½Éµµ ±íÀº ¼Ò°³´Â ÇÏÁö ¾Ê´Â´Ù. ÀÌ ÁÖÁ¦µé¿¡ ´ëÇÑ ±Û ¸ñ·ÏÀº Âü°í
ÀÚ·á ¸¦ ÂüÁ¶ÇÑ´Ù.
´ÙÁß ½º·¹µùÀÇ ±âº»
´ÙÁß ½º·¹µùÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¿½Ã¿¡ ÇÑ °³ ÀÌ»óÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» ó¸®Çϵµ·Ï ÇÏ´Â ÇÁ·Î±×·¡¹Ö ±â¹ýÀÌ´Ù.
½º·¹µå´Â º¸Åë µÎ °³ÀÇ ´Ù¸¥ À¯ÇüÀÇ ´ÙÁß ½º·¹µå ÀÛ¾÷¿¡ äÅõȴÙ.:
- Àû½Ã À̺¥Æ®, ƯÁ¤ ½Ã°£¿¡, ȤÀº ƯÁ¤ °£°ÝÀ¸·Î ÀÛ¾÷ÀÌ ¹ß»ýÇϵµ·Ï ½ºÄÉÁ층µÇ¾î¾ß ÇÒ ¶§
-
- ¹é±×¶ó¿îµå ó¸®, ÇöÀçÀÇ ½ÇÇà È帧°ú
º´ÇàÇÏ¿© ¹é±×¶ó¿îµå À̺¥Æ®¸¦ ó¸®Çϰųª ½ÇÇàÇØ¾ß ÇÒ ¶§
Àû½Ã À̺¥Æ®ÀÇ ¿¹·Î´Â ÇÁ·Î±×·¥ reminder, ŸÀÓ ¾Æ¿ô À̺¥Æ®, Æú¸µÀ̳ª refresh °°Àº ¹Ýº¹
ÀÛ¾÷À» µé ¼ö ÀÖ´Ù. ¹é±×¶ó¿îµå ó¸®ÀÇ ¿¹¿¡´Â Àü¼ÛÀ» ±â´Ù¸®´Â ÆÐŶÀ̳ª 󸮸¦ ±â´Ù¸®´Â ¼ö½Å ¸Þ½ÃÁöµîÀÌ
ÀÖ´Ù.
»ý»êÀÚ-¼ÒºñÀÚ °ü°è
»ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À´Â ¹é±×¶ó¿îµå ó¸® ¹üÁÖ¿¡ ¼ÓÇÏ´Â °æ¿ì¿¡ ÀûÇÕÇÏ´Ù. ÀÌ »óȲµéÀº ÀϹÝÀûÀ¸·Î ÀÛ¾÷
"»ý»êÀÚ"Ãø°ú ÀÛ¾÷ "¼ÒºñÀÚ"ÃøÀ» Áß½ÉÀ¸·Î ¼øȯÇÑ´Ù. º´Çà 󸮵Ǵ ÀÛ¾÷¿¡ °üÇÑ ´Ù¸¥ °í·Á »çÇ×µµ ÀÖ´Ù.
´ëºÎºÐÀÇ °æ¿ì µ¿ÀÏÇÑ ÀÚ¿øÀ» »ç¿ëÇÏ´Â ÀÛ¾÷µéÀº ¸ÕÀú µé¾î¿Â ÀÛ¾÷ÀÌ ¸ÕÀú ¼ºñ½º ¹Þ´Â ¹æ½ÄÀ¸·Î ¼øÂ÷ÀûÀ¸·Î
󸮵Ǿî¾ß Çϴµ¥, ÀÌ ¹æ½ÄÀº ´ÜÀÏ ½º·¹µåµÈ ¼ÒºñÀÚ¸¦ »ç¿ëÇÏ¿© ½±°Ô ¼öÇàµÉ ¼ö ÀÖ´Ù. ÀÌ ¹æ½ÄÀ» »ç¿ëÇÏ¿© ¿ì¸®´Â
ÇÑ ÀÚ¿ø¿¡ Á¢±ÙÇÏ´Â ¿©·¯ ½º·¹µå ´ë½Å, ÇϳªÀÇ ÀÚ¿ø¿¡ Á¢±ÙÇÏ´Â ÇϳªÀÇ ½º·¹µå¸¦ ´Ù·é´Ù.
Ç¥ÁØ ¼ÒºñÀÚ¸¦ ±¸µ¿ÇÏ·Á¸é, µé¾î¿À´Â ¸ðµç ÀÛ¾÷À» ÀúÀåÇϱâ À§ÇØ ÀÛ¾÷ Å¥°¡ »ý¼ºµÈ´Ù. »ý»êÀÚ ½º·¹µå´Â
󸮵Ǿî¾ß ÇÏ´Â »õ·Î¿î °´Ã¼¸¦ °¡Á®¿Í ¼ÒºñÀÚÀÇ Å¥¿¡ Ãß°¡ÇÑ´Ù. ±×·¯¸é ¼ÒºñÀÚ ½º·¹µå´Â Å¥¿¡¼ °¢ °´Ã¼¸¦ ²¨³»¾î
Â÷·Ê·Î ó¸®ÇÑ´Ù. Å¥°¡ ºñ¿öÁö¸é ¼ÒºñÀÚ´Â ÈÞ¸é »óÅ·Π°£´Ù. »õ·Î¿î °´Ã¼°¡ ºó Å¥¿¡ Ãß°¡µÇ¸é ¼ÒºñÀÚ´Â ±ú¾î³ª¼
°´Ã¼¸¦ ó¸®ÇÑ´Ù. ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼øÂ÷ 󸮸¦ ¼±È£Çϱ⠴빮¿¡ ¼ÒºñÀÚ´Â º¸Åë ´ÜÀÏ ½º·¹µåÇüÀÌ´Ù.
¹®Á¦ : ÄÚµå Áߺ¹
»ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À´Â ¸Å¿ì ÀϹÝÀûÀ̱⠶§¹®¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÒ ¶§ ¿©·¯ ¹ø µîÀåÇÏ°í, ±× °á°ú ÄÚµå
Áߺ¹ÀÌ ¹ß»ýÇÑ´Ù. ¿ì¸®´Â »ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À¸¦ ¿©·¯ ¹ø äÅÃÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß ÇÁ·Î¼¼½º¿¡¼ ÀÌ°ÍÀÌ
±Ù½É°Å¸®°¡ µÈ´Ù´Â »ç½ÇÀ» ¾Ë°Ô µÇ¾ú´Ù.
»ý»êÀÚ-¼ÒºñÀÚ ÇൿÀÌ Ã³À½ ÇÊ¿äÇÒ ¶§ ¿ì¸®´Â ÇϳªÀÇ ½º·¹µå¿Í ÇϳªÀÇ Å¬·¡½º¸¦ äÅÃÇÑ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ¿© À̸¦
±¸ÇöÇÏ¿´´Ù. µÎ¹ø°·Î ÇÊ¿äÇÒ ¶§ ¿ì¸®´Â óÀ½ºÎÅÍ ´Ù½Ã ÀÌ°ÍÀ» ±¸ÇöÇÏ·Á ÇßÁö¸¸ ÀÌÀü¿¡ ±¸ÇöÇß´Ù´Â »ç½ÇÀ» ¾Ë°Ô
µÇ¾ú´Ù. ±×·¡¼ Äڵ带 º¹»çÇÏ¿© °´Ã¼°¡ 󸮵Ǵ ¹æ½ÄÀ» ¼öÁ¤ÇÏ¿´´Ù. »ý»êÀÚ-¼ÒºñÀÚ ÇൿÀ» ¾ÖÇø®ÄÉÀ̼ǿ¡ ¼¼¹ø°
±¸ÇöÇßÀ» ¶§´Â ¿ì¸®°¡ ³Ê¹« ¸¹Àº Äڵ带 Áߺ¹½ÃÅ°°í ÀÖ´Ù´Â °ÍÀÌ ºÐ¸íÇØÁ³´Ù. ¿ì¸®´Â ¿ì¸®ÀÇ ¸ðµç »ý»êÀÚ-¼ÒºñÀÚ
½Ã³ª¸®¿À¸¦ ó¸®ÇÒ Æ÷°ýÀûÀÎ Consumer Ŭ·¡½º°¡ ÇÊ¿äÇÏ´Ù°í °áÁ¤ÇÏ¿´´Ù.
¿ì¸®ÀÇ ¼Ö·ç¼Ç : Consumer
Ŭ·¡½º
Consumer Ŭ·¡½º¸¦ ¸¸µé ¶§ ¿ì¸®ÀÇ ¸ñÀûÀº ¾ÖÇø®ÄÉÀÌ¼Ç ³»ÀÇ ¸ðµç
»ý»êÀÚ-¼ÒºñÀÚ ÀνºÅϽº¿¡ ´ëÇØ »õ·Î¿î ÀÛ¾÷ Å¥¿Í ¼ÒºñÀÚ ½º·¹µå¸¦ ÀÛ¼ºÇÒ ¶§ ¼ö¹ÝµÇ´Â ÄÚµå Áߺ¹ ¹®Á¦¸¦ ¾ø¾Ö´Â
°ÍÀ̾ú´Ù. ÀûÀýÇÑ Consumer Ŭ·¡½º°¡ ÀÖÀ¸¸é ¿ì¸®´Â ÀÛ¾÷ 󸮿¡ ±¹ÇÑµÈ Äڵ常
ÀÛ¼ºÇÏ¸é µÈ´Ù (ºñÁî´Ï½º ·ÎÁ÷). ±×·¯¸é Äڵ尡 ±ò²ûÇØÁö°í À¯Áö º¸¼ö°¡ ½¬¿öÁö¸ç º¯°æ¿¡ ´õ À¯¿¬ÇØÁø´Ù.
Consumer Ŭ·¡½º¿¡ ´ëÇÑ ¿ì¸®ÀÇ ¿ä±¸ »çÇ×Àº ¾Æ·¡¿Í °°´Ù.:
- Àç»ç¿ë : ¿ì¸®´Â ¸ðµç °ÍÀ» °¡Áø Ŭ·¡½º¸¦ ¿øÇÏ¿´´Ù. ½º·¹µå, Å¥ ¹× À̵éÀ» ¿¬°á½ÃÅ°´Â
¸ðµç ·ÎÁ÷ÀÌ ±×°ÍÀÌ´Ù. ±×·¯¸é ¿ì¸®´Â Å¥ÀÇ Æ¯Á¤ ÀÛ¾÷À» ó¸®ÇÏ´Â Äڵ常 ÀÛ¼ºÇÏ¸é µÉ °ÍÀÌ´Ù. (¿¹¸¦ µé¾î,
onConsume(ObjectjobToBeConsumed) À̶ó´Â ¸Þ¼Òµå´Â
Consumer Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ ¿À¹ö·ÎµåµÉ °ÍÀÌ´Ù.)
- Å¥ ¼±Åà : ¿ì¸®´Â Å¥ ±¸ÇöÀ»
Consumer °´Ã¼°¡ »ç¿ëÇϵµ·Ï
¼³Á¤ÇÒ ¼ö Àֱ⸦ ¿øÇÏ¿´´Ù. ±×·¯³ª ÀÌ°ÍÀº ¿ì¸®°¡ Å¥°¡ ½º·¹µå¿¡ ¾ÈÀüÇÔÀ» º¸ÁõÇØ¾ß Çϰųª ¼ÒºñÀÚ ÀÛ¾÷°ú
»óÃæµÇÁö ¾ÊÀ» ´ÜÀÏ ½º·¹µåµÈ »ý»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ¾ç °æ¿ì ¸ðµÎ, ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ÀÚ½ÅÀÇ
¸Þ¼Òµå¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Çã°¡Çϵµ·Ï Å¥¸¦ ¼³°èÇØ¾ß ÇÑ´Ù.
- ¼ÒºñÀÚ ½º·¹µå ¿ì¼± ¼øÀ§ ¼³Á¤ : ¿ì¸®´Â
Consumer ÀÇ
½º·¹µå°¡ ½ÇÇàµÉ ¿ì¼± ¼øÀ§¸¦ ¼³Á¤ÇÒ ¼ö Àֱ⸦ ¿øÇÏ¿´´Ù.
- ¼ÒºñÀÚ ½º·¹µå ¸í¸íÇϱâ : ½º·¹µå°¡ ÀÇ¹Ì ÀÖ´Â À̸§À»
°¡Áö´Â °ÍÀÌ Æí¸®ÇÏ°í, ºÐ¸íÈ÷ µð¹ö±ë¿¡µµ µµ¿òÀÌ µÈ´Ù. ¿¹¸¦ µé¾î, ¿©·¯ºÐÀÌ ÀÚ¹Ù °¡»ó ¸Ó½Å¿¡ ½ÅÈ£¸¦ º¸³»¸é
°¡»ó ¸Ó½ÅÀº ¸ðµç ½º·¹µå¿Í ±×¿¡ »óÀÀÇÏ´Â ½ºÅà Ʈ·¹À̽ºÀÇ ½º³À¼¦ÀÎ Àüü ½º·¹µå ´ýÇÁ¸¦ ¸¸µé¾î³¾ °ÍÀÌ´Ù. ÀÌ
½º·¹µå ´ýÇÁ¸¦ À©µµ¿ì Ç÷§Æû¿¡ »ý¼ºÇÏ·Á¸é ¿©·¯ºÐÀº ÀÚ¹Ù ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°í ÀÖ´Â À©µµ¿ì¿¡¼
<ctrl><break> ¸¦ ´©¸£°Å³ª À©µµ¿ìÀÇ Close ¹öÆ°À»
Ŭ¸¯ÇØ¾ß ÇÑ´Ù. Àüü ½º·¹µå ´ýÇÁ¸¦ »ç¿ëÇØ ÀÚ¹Ù ¼ÒÇÁÆ®¿þ¾î ¹®Á¦¸¦ Áø´ÜÇÏ´Â ¹æ¹ý¿¡ °üÇÑ »ó¼¼ Á¤º¸´Â Âü°í
ÀڷḦ ÂüÁ¶ÇÑ´Ù.
Ŭ·¡½º ÄÚµå
Listing 1¿¡¼¿Í °°ÀÌ, À§´Â getThread() ¸Þ¼Òµå¿¡
Consumer ÀÇ ½º·¹µå¸¦ »ý¼ºÇϱâ À§ÇØ "lazy creation"À»
»ç¿ëÇÏ¿´´Ù.:
Listing 1. ConsumerÀÇ ½º·¹µå »ý¼ºÇϱâ
/**
* Lazy creation of the Consumer's thread.
*
* @return the Consumer's thread
*/
private Thread getThread()
{
if (_thread==null)
{
_thread = new Thread()
{
public void run()
{
Consumer.this.run();
}
};
}
return _thread;
|
Listing 2¿¡¼¿Í °°ÀÌ, ½º·¹µåÀÇ run() ¸Þ¼Òµå´Â
Consumer ÀÇ run() ¸Þ¼Òµå¸¦ ½ÇÇà½ÃÅ°´Âµ¥, ÀÌ°ÍÀÌ ÁÖ
¼ÒºñÀÚ ·çÇÁÀÌ´Ù. :
Listing 2. The run() method is the main
Consumer loop
/**
* Main Consumer's thread method.
*/
private void run()
{
while (!_isTerminated)
{
// job handling loop
while (true)
{
Object o;
synchronized (_queue)
{
if (_queue.isEmpty())
break;
o = _queue.remove();
}
if (o == null)
break;
onConsume(o);
}
// if we are not terminated and the queue is still empty
// then wait until new jobs arrive.
synchronized(_waitForJobsMonitor)
{
if (_isTerminated)
break;
if(_queue.isEmpty())
{
try
{
_waitForJobsMonitor.wait();
}
catch (InterruptedException ex)
{
}
}
}
}
}// run()
|
±âº»ÀûÀ¸·Î, Consumer ÀÇ ½º·¹µå´Â ´õ ÀÌ»ó Å¥¿¡¼ ´ë±âÇÏ´Â ÀÛ¾÷ÀÌ ¾øÀ» ¶§±îÁö
½ÇÇàµÈ´Ù. ±× ÈÄ ÈÞ¸é »óÅ·Π°¡¼ add(Object) ¿¡ ´ëÇÑ Ã¹¹ø° È£ÃâÀÌ ÀÖÀ» ¶§
±ú¾î³´Ù. add(Object) ´Â Å¥¿¡ ½Å±Ô ÀÛ¾÷À» Ãß°¡ÇÏ°í ½º·¹µå¸¦ "Â÷¼"
±ú¿î´Ù.
"ÈÞ¸é"°ú "Â÷±â"´Â wait() ¿Í notify()
¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇØ ¼öÇàµÈ´Ù. ½ÇÁ¦ ¼ÒºñÀÚ ÀÛ¾÷Àº Listing 3¿¡ ³ª¿Í ÀÖ´Â °Í°ú °°ÀÌ
OnConsume(Object) ¸Þ¼Òµå¿¡ ÀÇÇØ Ã³¸®µÈ´Ù.:
Listing 3. ¼ÒºñÀÚ ±ú¿ì±â ¹× ÅëÁöÇϱâ
/**
* Add an object to the Consumer.
* This is the entry point for the producer.
* After the item is added, the Consumer's thread
* will be notified.
*
* @param the object to be 'consumed' by this consumer
*/
public void add(Object o)
{
_queue.add(o);
kickThread();
}
/**
* Wake up the thread (without adding new stuff to consume)
*
*/
public void kickThread()
{
if (!this._thread.isInterrupted())
{
synchronized(_waitForJobsMonitor)
{
_waitForJobsMonitor.notify();
}
}
}
|
¿¹Á¦ :
MessagesProcessor
Consumer Ŭ·¡½º°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ º¸¿© ÁÖ±â À§ÇØ °£´ÜÇÑ ¿¹¸¦ µé°Ú´Ù.
MessagesProcessor Ŭ·¡½º´Â µµÂøÇÏ´Â ¸Þ½ÃÁö¸¦ ºñµ¿±âÀûÀ¸·Î (Áï È£Ãâ
½º·¹µå¸¦ ¹æÇØÇÏÁö ¾Ê°í) ó¸®ÇÑ´Ù . ÀÌ Å¬·¡½ºÀÇ ÀÛ¾÷Àº µé¾î¿À´Â °¢ ¸Þ½ÃÁö¸¦ ÀμâÇÏ´Â °ÍÀÌ´Ù.
MessagesProcessor ´Â µµÂøÇÏ´Â ¸Þ½ÃÁö ÀÛ¾÷À» ´Ù·ç´Â ³»ºÎ
Consumer ¸¦ Æ÷ÇÔÇÑ´Ù. Listing 3¿¡¼¿Í °°ÀÌ, »õ·Î¿î ÀÛ¾÷ÀÌ ºó Å¥¿¡ µé¾î
¿À¸é Consumer ´Â processMessage(String)
¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© À̸¦ ó¸®Çϵµ·Ï ÇÑ´Ù.:
Listing 4. MessagesProcessor Ŭ·¡½º
class MessagesProcessor
{
String _name;
// anonymous inner class that supplies the consumer
// capabilities for the MessagesProcessor
private Consumer _consumer = new Consumer()
{
// that method is called on each event retrieved
protected void onConsume(Object o)
{
if (!(o instanceof String))
{
System.out.println("illegal use, ignoring");
return;
}
MessagesProcesser.this.processMessage((String)o);
}
}.setName("MessagesProcessor").init();
public void gotMessageEvent(String s)
{
_consumer.add(s);
}
private void processMessage(String s)
{
System.out.println(_name+" processed message: "+s);
}
private void terminate()
{
_consumer.terminateWait();
_name = null;
}
MessagesProcessor()
{
_name = "Example Consumer";
}
}
|
À§ÀÇ Äڵ忡¼ º¼ ¼ö ÀÖµíÀÌ, Consumer ¸¦ Ä¿½ºÅ͸¶ÀÌ¡ÇÏ´Â °ÍÀº ¸Å¿ì
°£´ÜÇÏ´Ù. À͸íÀÇ ³»ºÎ Ŭ·¡½º¸¦ ÅÃÇØ Consumer Ŭ·¡½º¸¦ È®ÀåÇÏ°í Ãß»ó ¸Þ¼ÒµåÀÎ
onConsume() ¸¦ ¿À¹ö·ÎµåÇÏ¸é µÈ´Ù. À̸®ÇÏ¿© ¿ì¸® ¿¹Á¦¿¡¼ °£´ÜÈ÷
processMessage ¸¦ È£ÃâÇÑ´Ù.
Ŭ·¡½ºÀÇ °í±Þ
±â´Éµé
¿ì¸®°¡ Ãâ¹ß½Ã ¿øÇß´ø ±âº» ¿ä±¸»çÇ׿¡ µ¡ºÙ¿© ¿ì¸®´Â Consumer Ŭ·¡½º¿¡ ¸î
°¡Áö À¯¿ëÇÑ °í±Þ ±â´ÉÀ» Á¦°øÇÏ¿´´Ù.
À̺¥Æ® ÅëÁö
- onThreadTerminate(): ÀÌ ¸Þ¼Òµå´Â
Consumer °¡ Á¾·áµÇ±â Á÷Àü¿¡ È£ÃâµÈ´Ù. ¿ì¸®´Â ÀÌ ¸Þ¼Òµå¸¦ µð¹ö±ë ¸ñÀûÀ¸·Î
¿À¹ö¶óÀ̵åÇÑ´Ù.
- goingToRest(): ÀÌ ¸Þ¼Òµå´Â Consumer ½º·¹µå°¡ ÈÞ¸é »óÅ·Π°¡±â Á÷Àü¿¡
È£ÃâµÈ´Ù (Áï
_waitForJobsMonitor.wait() È£Ãâ Á÷Àü).
Consumer°¡ ÈÞ¸é »óÅ·Π°¡±â Á÷Àü¿¡ ÀÏ´ÜÀÇ Ã³¸®µÈ ÀÛ¾÷À» Çڵ鸵ÇØ¾ß ÇÏ´Â º¹ÀâÇÑ °æ¿ì¿¡ ÀÌ·¯ÇÑ ÅëÁö°¡
ÇÊ¿äÇÒ ¼ö ÀÖ´Ù.
Á¾·á
- terminate(): Consumer ½º·¹µåÀÇ ºñµ¿±âÀû Á¾·á
- terminateWait(): Consumer ½º·¹µå°¡ ½ÇÁ¦·Î Á¾·áµÉ ¶§±îÁö È£Ãâ
½º·¹µå¸¦ ´ë±â »óÅ·Π¼³Á¤ÇÑ´Ù. .
¿ì¸® ¿¹Á¦¿¡¼ ¸¸¾à terminateWait() ´ë½Å
terminate() ¸¦ »ç¿ëÇß´Ù¸é ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù.
_name ÀÌ null °ªÀ¸·Î ¼³Á¤µÈ ÈÄ onConsume()
¸Þ¼Òµå°¡ È£ÃâµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¯¸é processMessage ¸¦ ½ÇÇà½ÃÅ°´Â
½º·¹µå°¡ NullPointerException À» º¸³»°Ô µÉ °ÍÀÌ´Ù.
°á·Ð : Consumer Ŭ·¡½ºÀÇ
ÀåÁ¡
Consumer Ŭ·¡½ºÀÇ ¼Ò½º¸¦ Âü°í
ÀÚ·á ¼½¼Ç¿¡¼ ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ ¼Ò½º¸¦ ÀÚÀ¯·Ó°Ô »ç¿ëÇÏ°í ¿©·¯ºÐÀÌ ÇÊ¿äÇÑ´ë·Î È®Àå½ÃÅ°±â ¹Ù¶õ´Ù.
´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÒ ¶§ÀÇ ÀÌÁ¡Àº ´ÙÀ½°ú °°´Ù.:
- ÄÚµå Àç»ç¿ë/Áߺ¹ ÄÚµå Á¦°Å :
Consumer Ŭ·¡½º¸¦ °¡Áö°í
ÀÖ´Ù¸é ¿©·¯ºÐ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ðµç ÀνºÅϽº¿¡ ´ëÇØ »õ·Î¿î ¼ÒºñÀÚ¸¦ ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ µÈ´Ù. »ý»êÀÚ-¼ÒºñÀÚ
½Ã³ª¸®¿À°¡ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡ ¾ó¸¶³ª ÀÚÁÖ µîÀåÇÏ´ÂÁö¸¦ »ý°¢Çϸé ÀÌ Å¬·¡½º´Â ¾öû³ ½Ã°£À» Àý¾àÇØ ÁØ´Ù.
¶ÇÇÑ Áߺ¹µÈ ÄÚµå´Â ¹ö±×¿¡°Ô´Â ºñ¿ÁÇÑ ¶¥°úµµ °°´Ù´Â °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù. ±×¸®°í Áߺ¹ ÄÚµå´Â ±âº»ÀûÀÎ ÄÚµå
À¯Áöº¸¼ö¸¦ ´õ¿í ¾î·Æ°Ô ÇÑ´Ù.
- ¹ö±× °¨¼Ò : °ËÁõµÈ ÄÚµåÀÇ »ç¿ëÀº ¹ö±× ¹æÁö¿¡ ÁÁÀºµ¥, ƯÈ÷ ´ÙÁß ½º·¹µåµÈ
¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù·ê ¶§ ±×·¯ÇÏ´Ù.
Consumer Ŭ·¡½º´Â ÀÌ¹Ì µð¹ö±ëµÇ¾ú±â ¶§¹®¿¡
´õ ¾ÈÀüÇÏ´Ù. Consumer Ŭ·¡½º´Â ¶ÇÇÑ ½º·¹µå¿Í ÀÚ¿ø°£¿¡ ¾ÈÀü Áß°³ÀÚ ¿ªÇÒÀ»
ÇÔÀ¸·Î½á ½º·¹µå °ü·Ã ¹ö±×¸¦ ¹æÁöÇÑ´Ù. Consumer ´Â ´Ù¸¥ ½º·¹µåµéÀ» ´ë½ÅÇؼ
ÀÚ¿øµé¿¡ ¼øÂ÷ÀûÀ¸·Î Á¢±ÙÇÑ´Ù.
- ÈǸ¢ÇÏ°í ±ò²ûÇÑ ÄÚµå :
Consumer Ŭ·¡½º¸¦ »ç¿ëÇϸé ÀÌÇØ¿Í
À¯Áöº¸¼ö°¡ ´õ¿í ½¬¿î, º¸´Ù °£´ÜÇÑ Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇØÁØ´Ù. Consumer
Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì ¿ì¸®´Â µÎ °³ÀÇ ´Ù¸¥ ±â´ÉÀ» ó¸®ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. : ¼Òºñ ·ÎÁ÷
(Å¥¿Í ½º·¹µå °ü¸®, µ¿±âȵî)°ú ¼ÒºñÀÚÀÇ ¿ëµµ³ª ±â´ÉÀ» ÁöÁ¤ÇØ ³õÀº Äڵ尡 ±×°ÍÀÌ´Ù.
ÀÌ ±ÛÀÇ ÀÛ¼º¿¡ µµ¿òÀ» ÁֽŠAllot CommunicationsÀÇ Jonathan Lifton°ú
Dov Trietsch¿¡°Ô °¨»ç¸¦ Ç¥ÇÕ´Ï´Ù.
Âü°í ÀÚ·á
|