¼Ò¼³°°ÀºJSP1ºÎ  4Àå Core of Servlet  23 SingleThreadModel  

 

23 SingleThreadModel

 

 ÀϹÝÀûÀÎ ¼­ºí¸´Àº Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀÌ ÀÖÀ» ¶§¸¶´Ù ¼­ºí¸´Àº ¿äûÀ» ó¸®ÇÏ°Ô µË´Ï´Ù. ¼­ºí¸´Àº service() ¸Þ¼­µå¸¦ µ¿½Ã¿¡ È£ÃâÇÏ´Â °ÍÀ» ±âº»À¸·Î Çϰí Àֱ⠶§¹®¿¡ ¸¸¾à service() ¸Þ¼­µå ³»ºÎ¿¡ °øÀ¯ÀÚ¿øÀÌ ÀÖÀ» ¶§¿¡´Â ¹®Á¦°¡ ¹ß»ýÇÏ°Ô µË´Ï´Ù. ±×·¡¼­ µ¿½Ã¿¡ service() ¸Þ¼­µå°¡ È£ÃâÇÏÁö ¸øÇϵµ·Ï ¼­ºí¸´ ÄÁÅ×ÀÌ³Ê Â÷¿ø¿¡¼­ ¹æÁöÇÏ°Ô µÇ´Âµ¥ À̶§ SingleThreadModel ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ°Ô µË´Ï´Ù. SingleThreadModel ÀÎÅÍÆäÀ̽º´Â ¾î¶°ÇÑ ¸Þ¼­µåµµ °¡Áö°í ÀÖÁö ¾Ê±â ¶§¹®¿¡ ¼­ºí¸´µÚ¿¡ implements SingleThreadModel¸¸ ºÙ¿© ÁÖ¸é µË´Ï´Ù. ÀÌ¿Í °°Àº ¿ø¸®¸¦ ±×¸²À¸·Î ³ªÅ¸³»¸é ¾Æ·¡¿Í °°½À´Ï´Ù.

 

 

 SingleThreadModelÀº ¿äûÀ» ¼ø¼­´ë·Î ¼öÇàÇϱ⠶§¹®¿¡ ¼Óµµ°¡ ´À·ÁÁú ¿ì·Á°¡ Àֱ⠶§¹®¿¡ ½ÅÁßÇÏ°Ô »ç¿ëÇÏ¼Å¾ß ÇÕ´Ï´Ù. SingleThreadModelÀ» ±¸ÇöÇÏ´õ¶óµµ µ¿±âÈ­¸¦ ¿Ïº®ÇÏ°Ô º¸ÀåÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ´ÙÀ½°ú °°Àº °æ¿ì¿¡´Â µ¿±âÈ­¸¦ SingleThreadModel ¶ÇÇÑ µ¿±âÈ­¸¦ º¸ÀåÇÏÁö ¸øÇÕ´Ï´Ù.

 

SingleThreadModelÀ» »ç¿ëÇÏ´õ¶óµµ µ¿±âÈ­¸¦ º¸ÀåÇÏÁö ¸øÇÏ´Â °æ¿ì

n        ½ºÅÂÆ½ Ŭ·¡½º ¸â¹öº¯¼ö

n        ¼­ºí¸´ ¿µ¿ª ¿ÜºÎ¿¡ Àִ Ŭ·¡½º

 

ÀÌ·¯ÇÑ °æ¿ì¿¡´Â ¸Þ¼­µå¿¡ synchronized Ű¿öµå¸¦ °É°Å³ª synchronized ºí·ÏÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ Ãø¸éÀ» °í·ÁÇϸ鼭 ´ÙÀ½ÀÇ ¿¹Á¦¸¦ »ìÆì º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

NotSingleThreadModelTest.java

 

package chap4;  
import java.io.*;    
import java.util.*;  
import javax.servlet.*;    
import javax.servlet.http.*;    
public class NotSingleThreadModelTest extends HttpServlet implements Runnable {    
  
public int value = 5000;
  
public void run(){
    
try{
      Thread.sleep(
2000);
    }
catch(Exception e){}
    
this.value = value-6000;
  }
  
public void service(HttpServletRequest request, HttpServletResponse response) 

throws ServletException, IOException {    
    response.setContentType(
"text/html;charset=KSC5601");  
     PrintWriter out = response.getWriter();    
    out.println(
"<h1>NotSingleThreadModelTest</h1><br>");
    out.print(
"ÃÖÃÊ ±Ý¾× : " +value+"<br>");  
      
if(value>0){
        
new Thread(this).start();
        
try{
          Thread.sleep(
3000);
        }
catch(Exception e){}
    out.print(
"¼öÁ¤ ±Ý¾× : " +value+"<br>");  
      } 
else{
        out.println(
"ÀܾנºÎÁ·");
      }

    out.close();  
  }  
}

 

À§ÀÇ ¿¹Á¦´Â Àܾ×ÀÌ 0º¸´Ù Ŭ °æ¿ì Àܾ׿¡¼­ 6000À» »©´Â ÀÏÀ» ÇÏ´Â ½º·¹µå°¡ µ¿ÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. Àܾ×ÀÌ »¬ ±Ý¾×º¸´Ù À۾Ƶµ »ó°üÀº ¾øÁö¸¸ 0 º¸´Ù´Â Ä¿¾ß ÇÕ´Ï´Ù. ±×·±µ¥ À§ÀÇ °á°ú È­¸é¿¡¼­ º¸µíÀÌ µÎ °³ÀÇ ºê¶ó¿ìÁ® âÀÌ ¶á »óÅ¿¡¼­ °ÅÀÇ µ¿½Ã¿¡ Á¢±ÙÀ» ÇÏ°Ô µÇ¸é ¸ÕÀú ½ÇÇàµÈ ½º·¹µå°¡ Àܾ׿¡¼­ 6000À» »©±â Àü¿¡ µÎ ¹øÂ° ½º·¹µå°¡ Àܾ×À» ºñ±³ÇÏ°Ô µÇ´Âµ¥ ¾ÆÁ÷ ù¹øÂ° ½º·¹µå°¡ Â÷¸¦ ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ 0º¸´Ù Å©´Ù°í ÀνÄÇÏ°í ½º·¹µå¸¦ ¹ß»ýÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

 ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ³ªÅ¸³­ °ÍÀÌ ¾Õ¿¡¼­ ¸»¾¸µéÀÎ SingleThreadModel ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. ±×·³ À§ÀÇ ¿¹Á¦¿¡¼­ SingleThreadModel ÀÎÅÍÆäÀ̽º¸¦ implements ÇÑ ÈÄ ÇÁ·Î±×·¥À» À§¿Í °°Àº ¹æ½ÄÀ¸·Î µ¹·Á º¸°Ú½À´Ï´Ù.

 

SingleThreadModelTest.java

 

package chap4;  
import java.io.*;    
import java.util.*;  
import javax.servlet.*;    
import javax.servlet.http.*;    
public class SingleThreadModelTest extends HttpServlet 

implements Runnable, SingleThreadModel {    
  
public int value = 5000;
  
public void run(){
    
try{
      Thread.sleep(
2000);
    }
catch(Exception e){}
    
this.value = value-6000;
  }
  
public void service(HttpServletRequest request, HttpServletResponse response) 

throws ServletException, IOException {    
    response.setContentType(
"text/html;charset=KSC5601");  
     PrintWriter out = response.getWriter();    
    out.println(
"<h1>SingleThreadModelTest</h1><br>");
    out.print(
"ÃÖÃÊ ±Ý¾× : " +value+"<br>");  
      
if(value>0){
        
new Thread(this).start();
        
try{
          Thread.sleep(
3000);
        }
catch(Exception e){}
    out.print(
"¼öÁ¤ ±Ý¾× : " +value+"<br>");  
      } 
else{
        out.println(
"ÀܾנºÎÁ·");
      }

    out.close();  
  }  
}

 

 

¾ÕÀÇ ¹æ½Ä°ú ¶È°°ÀÌ ºê¶ó¿ìÁ® âÀ» µÎ°³ ¶ç¿îÈÄ µ¿½Ã¿¡ Á¢¼ÓÇßÀ» °æ¿ì ÀÔ´Ï´Ù.

ÇÏÁö¸¸ °á°ú´Â ´Ù¸£°Ô ³ª¿À°Ô µË´Ï´Ù. SingleThreadModel ÀÎÅÍÆäÀ̽º°¡ ½º·¹µå¸¦ ÇϳªÇϳª ó¸® Ç߱⠶§¹®¿¡ ÀÌ·± °á°ú°¡ ³ª¿À°Ô µÈ °ÍÀÔ´Ï´Ù.

 ÇÏÁö¸¸ ¾Õ¿¡¼­ ¼³¸íµå·ÈµíÀÌ SingleThreadModel ÀÎÅÍÆäÀ̽º·Î¸¸ µ¿±âÈ­¸¦ Á¦¾î ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ±â¾ï ÇØµÎ½Ã±â ¹Ù¶ø´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºJSP1ºÎ
ÀúÀÚ:ÃÖ¿µ°ü