20-2.½º·¹µå °ü¸®

20-2-1.½º·¹µå »óÅÂ

½º·¹µå¸¦ »ý¼ºÇÏ°í start·Î ±âµ¿½ÃÅ°¸é ÀÌÈĺÎÅÍ ¿î¿µÃ¼Á¦´Â ÁÖ±âÀûÀ¸·Î ½Ã°£À» ÇÒ´çÇÏ¿© ½º·¹µå¸¦ ½ÇÇàÇÑ´Ù. run ¸Þ¼­µå°¡ ¸®ÅÏÇÏ¿© ÀÛ¾÷À» ¿Ï·áÇÏ¸é ½º·¹µå´Â ½ÇÇàÀ» Á¾·áÇÏ°í °ü·Ã Á¤º¸³ª È£Ãâ ½ºÅÃÀº Á¦°ÅµÈ´Ù.

½º·¹µå¸¦ °ü¸®ÇÏ´Â ÀÏÀº ¿î¿µÃ¼Á¦ÀÇ ¸òÀ̸ç ÇÁ·Î±×·¥Àº ÇÊ¿äÇÒ ¶§ ½º·¹µå¸¦ »ý¼ºÇÏ¿© ±âµ¿½ÃÅ°¸é µÈ´Ù. ±×·¯³ª ¶§·Î´Â ÁÖ ½º·¹µå¿¡¼­ ÀÛ¾÷ ½º·¹µåÀÇ ½ÇÇàÀ» Á¦¾îÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿î¿µÃ¼Á¦ÀÇ »óȲ¿¡ µû¶ó, °ü¸® ¸Þ¼­µå È£Ãâ¿¡ ÀÇÇØ ½º·¹µå´Â ´ÙÀ½°ú °°Àº »óŸ¦ ¼øȯÇÑ´Ù.

start¿¡ ÀÇÇØ ½º·¹µå¸¦ ±âµ¿ÇÒ ¶§ ¹Ù·Î ½ÇÇàÀ» ½ÃÀÛÇÏÁö ¾Ê°í ½ÇÇà´ë±â Å¥¿¡¼­ ÀÚ±â Â÷·Ê¸¦ ±â´Ù¸°´Ù. ½ºÄÉÁÙ·¯´Â CPU ½Ã°£À» ÂÉ°³ ´ë±â¿­ÀÇ ½º·¹µå¸¦ ¹ø°¥¾Æ ½ÇÇàÇÑ´Ù. ÀÚ±â Â÷·Ê°¡ µÇ¸é run ¸Þ¼­µåÀÇ Äڵ带 ½ÇÇàÇϸç ÇÒ´ç ¹ÞÀº ½Ã°£À» ´Ù ¾²¸é ´ë±â¿­·Î µé¾î°¡ ´ÙÀ½ Â÷·Ê¸¦ ±â´Ù¸°´Ù. run ¸Þ¼­µåÀÇ ¸ðµç Äڵ带 ½ÇÇàÇÏ°í ¸®ÅÏÇÏ¸é ½º·¹µå´Â Á¾·áµÈ´Ù.

ÀÌ°ÍÀÌ °¡Àå º¸ÆíÀûÀÎ ½º·¹µåÀÇ ÀÏ»ýÀÌµÇ ¿î¿µÃ¼Á¦ÀÇ »óȲ¿¡ µû¶ó ½º·¹µåÀÇ ½ÇÇà »óÅ°¡ ¹Ù²ð ¼ö ÀÖ°í ½º·¹µå °ü¸® ¸Þ¼­µå¿¡ ÀÇÇØ º¯È­¸¦ ÁÙ ¼öµµ ÀÖ´Ù. ½º·¹µåÀÇ ÇöÀç »óŸ¦ Á¶»çÇÒ ¶§´Â ´ÙÀ½ ¸Þ¼­µå¸¦ È£ÃâÇÑ´Ù.

 

Thread.State getState()

 

Thread.State¶ó´Â ³»ºÎ ¿­°ÅÇü ŸÀÔÀÇ °ªÀ» ¸®ÅÏÇϴµ¥ ´ÙÀ½°ú °°Àº ¿­°Å°ªÀÌ Á¤ÀǵǾî ÀÖ´Ù.

 

»óÅÂ

¼³¸í

NEW

»ý¼º¸¸ µÇ¾î ÀÖ°í ¾ÆÁ÷ ½ÃÀÛÀº ÇÏÁö ¾ÊÀº »óÅÂ

RUNNABLE

½ÇÇàÁß ¶Ç´Â ´ÙÀ½ ½ÇÇà ½Ã°£À» ±â´Ù¸®´Â »óÅÂ

BLOCKED

µ¿±âÈ­ ºí·Ï¿¡ µé¾î°¡±â À§ÇØ ´ë±âÁßÀÎ »óÅÂ

WAITING

´Ù¸¥ ½º·¹µå°¡ ƯÁ¤ ÀÛ¾÷À» ¿Ï·áÇÒ ¶§±îÁö ´ë±âÁß

TIMED_WAITING

ÁöÁ¤ÇÑ ½Ã°£µ¿¾È ´Ù¸¥ ½º·¹µåÀÇ ÀÛ¾÷ ¿Ï·á ´ë±âÁß

TERMINATED

½ÇÇàÀ» ¸¶Ä¡°í Á¾·áµÈ »óÅÂ

 

getState ¸Þ¼­µå´Â ½º·¹µå »óŸ¦ ¸ð´ÏÅ͸µÇÏ´Â ¸ñÀûÀ¸·Î¸¸ »ç¿ëÇÏ¸ç µ¿±âÈ­¿¡ »ç¿ëÇÏ´Â °ÍÀº ±ÇÀåÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸Þ¼­µå´Â ÀÚ¹Ù 1.5¿¡¼­ µÚ´Ê°Ô Ãß°¡µÇ¾ú´Âµ¥ ±× Àü¿¡´Â »óÅ Á¶»ç ¾øÀ̵µ ½º·¹µå¸¦ Àß »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù´Â ¾ê±â´Ù. ´ÙÀ½ ¼¼ ¸Þ¼­µå´Â ½º·¹µåÀÇ »óŸ¦ °­Á¦·Î º¯°æÇÑ´Ù.

 

void suspend() 

void resume() 

void stop() 

 

°¢°¢ ½º·¹µå¸¦ ÀϽà ÁßÁö, Àç°³, °­Á¦ Á¾·á½ÃŲ´Ù. ½ºÄÉÁÙ·¯´Â ÀϽà ÁßÁöµÈ ½º·¹µå¿¡°Ô CPU ½Ã°£À» ÁÖÁö ¾ÊÀ¸¸ç Àç°³ÇÏ¸é ´Ù½Ã ½Ã°£À» ÇÒ´ç¹Þ´Â´Ù. suspend´Â ¾óÀ½ÀÌ°í resumeÀº ¶¯ÀÌ´Ù. ¸Þ¼­µå À̸§¸¸Å­À̳ª ±â´Éµµ ¸íÄèÇÏ´Ï °£´ÜÇÑ ¿¹Á¦·Î Å×½ºÆ®Çغ¸ÀÚ.

 

suspend

class JavaTest {

     public static void main(String[] args) {

          PrintThread worker = new PrintThread();

          worker.start();

         

          for (int num = 0;num < 30;num++) {

              System.out.print("O");

              try { Thread.sleep(200); } catch (InterruptedException e) { ; }

              if (num == 5) worker.suspend();

              if (num == 25) worker.resume();

          }

     }

}

 

class PrintThread extends Thread {

     public void run() {

          for (int num = 0;num < 30;num++) {

              System.out.print("X");

              try { Thread.sleep(100); } catch (InterruptedException e) { ; }

          }

     }

}

½ÇÇà°á°ú

XOXXXOXOXXOXXOXXXOOOOOOOOOOOOOOOOOOOOOXXXOXXOXXOXOXXXXXXXXXX

 

ÁÖ½º·¹µå¿¡¼­ numÀÌ 5ÀÏ ¶§ ÀÛ¾÷ ½º·¹µå¸¦ Àá½Ã ÁßÁö½ÃÅ°°í numÀÌ 25ÀÏ ¶§ ´Ù½Ã Àç°³½ÃÄ×´Ù. µ¿±×¶ó¹Ì 5°³ ÂïÀº ÈÄ ÀÛ¾÷ ½º·¹µå´Â Àá½Ã ¸ØÃß°í µ¿±×¶ó¹Ì¸¸ °è¼Ó Âï´Ù°¡ 25°³ ÂïÀº ÈĺÎÅÍ X°¡ Ãâ·ÂµÈ´Ù.

½º·¹µå¸¦ °­Á¦·Î Á¤Áö½ÃÅ°¸é µ¿±âÈ­ ¹®Á¦·Î ÀÎÇÑ µ¥µå¶ô À§ÇèÀÌ ÀÖ¾î ÀÌ ¸Þ¼­µåµéÀº ±ÇÀåÇÏÁö ¾ÊÀ¸¸ç Æó±âµÇ¾ú´Ù. ÀÛ¾÷ ½º·¹µå°¡ ƯÁ¤ ÀÚ¿øÀ» »ç¿ëÇÏ°í ÁÖ½º·¹µå°¡ ÀÌ ÀÚ¿øÀÌ ÇØÁ¦µÇ±â¸¦ ±â´Ù¸®°í ÀÖ´Â »óÅ¿¡¼­ ÀÛ¾÷ ½º·¹µå°¡ Á¤ÁöµÇ¸é ´ë±â »óŸ¦ Ç® ¼ö ¾ø¾î À§ÇèÇÏ´Ù.

½º·¹µåÀÇ »óÅ´ ½ºÄÉÁÙ·¯°¡ ¾Ë¾Æ¼­ Àß ÅëÁ¦Çϴµ¥ À̸¦ ÀÎÀ§ÀûÀ¸·Î °Çµå¸®¸é »ç°í°¡ ¹ß»ýÇÒ °¡´É¼ºÀÌ ³ô¾ÆÁø´Ù. °¡±ÞÀû ÀÚ¿¬½º·´°Ô Èê·¯°¡µµ·Ï ³» ¹ö·Á µÎ´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½ µÎ ¸Þ¼­µå´Â ½º·¹µåÀÇ ½ÇÇà ½Ã°£À» Á¦¾îÇÑ´Ù.

 

static void sleep(long millis)

static void yield()

 

sleep ¸Þ¼­µå´Â ÁöÁ¤ÇÑ ½Ã°£¸¸Å­ ½º·¹µåÀÇ ½ÇÇàÀ» ÁßÁöÇÏ°í Àá½Ã ½®´Ù. ½Ã°£Àº 1/1000ÃÊ ´ÜÀ§·Î ¼¶¼¼ÇÏ°Ô ÁöÁ¤ÇÑ´Ù. ½¬´Â Áß¿¡ interrupt ¸Þ¼­µå¿¡ ÀÇÇØ °­Á¦·Î ´ë±â°¡ Ç®¸± ¼ö ÀÖ¾î ¹Ýµå½Ã ¿¹¿Ü 󸮸¦ ÇØ¾ß ÇÏ¸ç ±×·¡¼­ try ºí·ÏÀÌ ÇʼöÀûÀÌ´Ù. Áö±Ý±îÁöÀÇ ¿¹Á¦¿¡¼­ Ãâ·Â ¼Óµµ¸¦ Á¦¾îÇϱâ À§ÇØ °è¼Ó »ç¿ëÇß¾ú´Ù.

yield´Â ÇÒ´çµÈ ½Ã°£À» Æ÷±âÇÏ°í ½ÇÇà ½Ã°£À» ¾çº¸Çϵµ·Ï Àǻ縦 Ç¥½ÃÇÑ´Ù. ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇÑ´Ù°í Çؼ­ Áï½Ã ½ÇÇà ´ë±â »óÅ°¡ µÇ´Â °ÍÀº ¾Æ´Ï¸ç ½ºÄÉÁÙ·¯°¡ °áÁ¤ÇÑ´Ù. ½º·¹µå°¡ ¾çº¸ÇÏ´õ¶óµµ CPU¸¦ ¾µ ½º·¹µå°¡ ¾øÀ¸¸é ¹Ý³³À» ¹ÞÁö ¾Ê´Â´Ù. °æÀï »óÅ Çؼҳª µð¹ö±ë ¸ñÀûÀ¸·Î¸¸ °¡²û »ç¿ëµÇ¸ç ½Ç¿ëÀûÀ¸·Î ÀÌ ¸Þ¼­µå°¡ ²À ÇÊ¿äÇÑ °æ¿ì´Â µå¹°´Ù.

sleepÀ̳ª yield´Â µÑ ´Ù Á¤Àû ¸Þ¼­µå¿©¼­ ƯÁ¤ ½º·¹µå °´Ã¼¿¡ ´ëÇØ È£ÃâÇÒ ¼ö ¾ø´Ù. ´ë±â³ª ¾çº¸ÀÇ ´ë»óÀº Ç×»ó ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â ÇöÀç ½º·¹µåÀÌ´Ù. ÀÚ¹ßÀûÀ¸·Î ½Ã°£À» ¾çº¸ÇÒ ¼ö´Â À־ ¿ÜºÎ¿¡¼­ worker.sleep()½ÄÀ¸·Î È£ÃâÇÏ¿© ´Ù¸¥ ½º·¹µåÀÇ ½ÇÇàÀ» °­Á¦·Î Á¦¾îÇÒ ¼ö´Â ¾ø´Ù.

20-2-2.¿ì¼±¼øÀ§

½º·¹µå´Â CPU ½Ã°£À» °øÆòÇÏ°Ô ¹èÁ¤¹Þ´Â´Ù. ¾Õ¿¡¼­ ¸¸µç ¿¹Á¦ÀÇ µÎ ½º·¹µå´Â sleep ½Ã°£ÀÌ ´Þ¶ó ³¡³ª´Â ½Ã°£¿¡ Â÷ÀÌ°¡ Àִµ¥ Áö¿¬ ½Ã°£À» ÀÏÄ¡½ÃÅ°¸é °ÅÀÇ ¶È°°ÀÌ ³¡³­´Ù. ¿ì¼±¼øÀ§´Â CPU ½Ã°£À» ¾ó¸¶³ª ´õ »ç¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÏ´Â ½º·¹µåÀÇ ¼Ó¼ºÀÌ´Ù.

±ä±ÞÇÑ ÀÛ¾÷À» ó¸®ÇÏ´Â ½º·¹µå´Â ¿ì¼±¼øÀ§¸¦ ³ô¿© ´õ ¸¹Àº CPU ½Ã°£À» ¹èÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¹é±×¶ó¿îµå ÀÛ¾÷Àº õõÈ÷ Çصµ »ó°ü¾øÁö¸¸ »ç¿ëÀÚ¸¦ ´ë¸éÇÏ´Â ½º·¹µå´Â ¹ÝÀÀÀÌ ¹ÎøÇØ¾ß ÇϹǷΠ¿ì¼±¼øÀ§¸¦ ³ôÀÌ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¿ì¼±¼øÀ§´Â ´ÙÀ½ ¸Þ¼­µå·Î Á¶»ç ¹× ¼³Á¤ÇÑ´Ù.

 

void setPriority(int newPriority)

 

1 ~ 10±îÁöÀÇ Áß¿äµµ¸¦ ÁöÁ¤Ç쵂 º¸ÅëÀº ´ÙÀ½ ¼¼ °³ÀÇ »ó¼ö·Î º¸Åë ¼øÀ§, ³ôÀº ¼øÀ§, ³·Àº ¼øÀ§ Á¤µµ¸¸ ÁöÁ¤ÇÑ´Ù. »ó¼ö ´ë½Å 1 ~ 10 »çÀÌÀÇ ÀÓÀÇÀÇ Á¤¼ö¸¦ »ç¿ëÇصµ »ó°ü¾ø´Ù. 10ÀÌ °¡Àå ³ô°í 1ÀÌ °¡Àå ³·´Ù.

 

public static final int NORM_PRIORITY = 5;

public static final int MIN_PRIORITY = 1;

public static final int MAX_PRIORITY = 10;

 

¿ì¼±¼øÀ§´Â Àý´ëÀûÀÎ °ªÀÌ ¾Æ´Ï¶ó »ó´ëÀûÀÎ °ªÀÌ´Ù. ¿ì¼±¼øÀ§ 5ÀÇ ½º·¹µå´Â 3º¸´Ù´Â ´õ ¸¹Àº ½Ã°£À» ÇÒ´ç ¹ÞÀ¸¸ç 7º¸´Ù´Â ´õ ÀûÀº ½Ã°£À» ÇÒ´ç ¹Þ´Â´Ù. »õ·Î »ý¼ºµÇ´Â ½º·¹µå´Â ºÎ¸ð ½º·¹µåÀÇ ¿ì¼±¼øÀ§¸¦ »ó¼Ó¹Þ´Â´Ù. ÁÖ ½º·¹µåÀÇ µðÆúÆ® ¿ì¼±¼øÀ§´Â 5À̸ç ÀÛ¾÷ ½º·¹µåµµ Ưº°ÇÑ ÁöÁ¤ÀÌ ¾ø´Â ÇÑ 5 ¼øÀ§·Î »ý¼ºµÈ´Ù. ¿ì¼±¼øÀ§´Â start ¸Þ¼­µå È£Ãâ Àü¿¡, Áï ½º·¹µå°¡ ½ÃÀ۵DZâ Àü¿¡ ¹Ì¸® º¯°æÇØ¾ß ÇÑ´Ù.

 

priority

class JavaTest {

     public static void main(String[] args) {

          PrintThread1 worker1 = new PrintThread1();

          PrintThread2 worker2 = new PrintThread2();

          worker1.start();

          worker2.setPriority(Thread.MAX_PRIORITY);

          worker2.start();

     }

}

 

class PrintThread1 extends Thread {

     public void run() {

          double sum = 0;

          for (int i = 0;i < 10000000;i++) {

              sum += Math.cos(i);

          }

          System.out.println("cos = " + sum);

     }

}

 

class PrintThread2 extends Thread {

     public void run() {

          double sum = 0;

          for (int i = 0;i < 10000000;i++) {

              sum += Math.sin(i);

          }

          System.out.println("sin = " + sum);

     }

}

½ÇÇà°á°ú

cos = 1.3385389790054403

sin = 1.5353436153503854

 

PrintThread1 ½º·¹µå´Â cos °ªÀ» õ¸¸ ¹ø °è»êÇÏ´Â ¿¬»êÀ» ¼öÇàÇϸç PrintThread2 ½º·¹µå´Â sin °ªÀ» õ¸¸ ¹ø °è»êÇÑ´Ù. µÑ ´Ù ±²ÀåÈ÷ ¿À·¡ °É¸®´Â ¿¬»êÀ» Çϴµ¥ ¸ÕÀú ³¡³ª´Â ½º·¹µåÀÇ °á°ú°¡ À§ÂÊ¿¡ Ãâ·ÂµÈ´Ù. worker2ÀÇ ¿ì¼±¼øÀ§¸¦ ÃÖ´ëÇÑ ³ô¿© µÎ¾ú±â ¶§¹®¿¡ ÀÌ ½º·¹µå°¡ ´õ ¸¹Àº ½Ã°£À» ÇÒ´ç¹Þ¾Æ ÀÛ¾÷ÀÌ ¸ÕÀú ³¡³¯ °ÍÀÌ´Ù.

À̷лóÀ¸·Î´Â ±×·¸Áö¸¸ ¿ì¼±¼øÀ§ °áÁ¤ ¾Ë°í¸®ÁòÀº ½Ã½ºÅÛ »óȲ¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖ°í ¿©·¯ ¿ä¼Ò°¡ °³ÀÔÇϱ⠶§¹®¿¡ ½ÇÁ¦ °á°ú´Â ¿¹ÃøÇϱ⠾î·Æ´Ù. ¿ì¼±¼øÀ§ ÁöÁ¤Àº ½Ã°£À» ÀÚÁÖ ÇÒ´çÇØ ´Þ¶ó´Â ¿äûÀÏ »ÓÀ̸ç ÀÌ ¿äûÀ» µé¾îÁÙ °ÍÀΰ¡ ¾Æ´Ñ°¡´Â ½Ã½ºÅÛÀÌ °áÁ¤ÇÑ´Ù. ´ë°³ÀÇ °æ¿ì´Â ´«¿¡ ¶é¸¸ÇÑ Â÷ÀÌ°¡ ³ªÁö ¾ÊÀ¸¸ç Á¤±³ÇÑ ½ºÄÉÁÙ¸µ ¾Ë°í¸®Áò¿¡ ¹æÇØ°¡ µÇ¹Ç·Î À¢¸¸ÇÏ¸é °Çµå¸®Áö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.

½º·¹µå´Â °íÀ¯ÇÑ ¹®ÀÚ¿­ À̸§À» °¡Áø´Ù. ½º·¹µå¸¦ »ý¼ºÇÒ ¶§ Àμö¸¦ Àü´ÞÇÏ¿© À̸§À» ¹Ì¸® ÁöÁ¤Çϰųª ½ÇÇàÁß¿¡ ´ÙÀ½ ¸Þ¼­µå·Î À̸§À» º¯°æ, Á¶»çÇÑ´Ù.

 

void setName(String name)

String getName()

 

º°µµÀÇ À̸§À» ÁÖÁö ¾ÊÀ¸¸é ÁÖ½º·¹µå´Â mainÀ̶ó´Â À̸§ÀÌ ÁÖ¾îÁö¸ç ÀÛ¾÷ ½º·¹µå´Â Thread-n À̶ó´Â ÀÏ·Ã ¹øÈ£·Î À̸§À» ºÙÀδÙ. ½º·¹µå À̸§Àº ½ÇÇà°ú´Â º°¹Ý »ó°üÀÌ ¾øÀ¸¸ç µð¹ö±ëÀ̳ª Á¤º¸ Ãâ·Â¿ëÀ¸·Î »ç¿ëµÈ´Ù.

20-2-3.µ¥¸ó ½º·¹µå

½º·¹µå´Â Á¾·á ¹æ½Ä¿¡ µû¶ó »ç¿ëÀÚ ½º·¹µå(User Thread)¿Í µ¥¸ó ½º·¹µå(Daemon Thread)·Î ³ª´©¾îÁø´Ù. »ç¿ëÀÚ ½º·¹µå°¡ ¸ðµÎ Á¾·áµÇ¾î¾ß ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¸ç Çϳª¶óµµ ½ÇÇàÁßÀÌ¸é ¸¶Áö¸· ½º·¹µå°¡ ½ÇÇàÀ» ¸¶Ä¥ ¶§±îÁö ±â´Ù¸°´Ù. ¹Ý¸é µ¥¸óÀº ÇÁ·Î±×·¥ Á¾·á½Ã¿¡ ½º·¹µå°¡ ½ÇÇàÁßÀÌ´õ¶óµµ °­Á¦ Á¾·áµÈ´Ù.

»ç¿ëÀÚ¸¦ ´ë¸éÇϰųª À¯ÇÑÇÑ ¿¬»êÀ» ó¸®ÇÑ´Ù¸é »ç¿ëÀÚ ½º·¹µå·Î ¸¸µé¾î ÀÛ¾÷ÀÌ ³¡³¯ ¶§±îÁö °è¼Ó ½ÇÇàÇØ¾ß ÇÑ´Ù. ¹Ý¸é ´Ü¼øÇÑ Àå½ÄÀ̳ª ¹®¼­ ÀÚµ¿ ÀúÀå µî ¾ðÁ¦µçÁö ±×¸¸ µÎ¾îµµ »ó°ü¾ø´Â ÀÛ¾÷Àº µ¥¸ó ½º·¹µå·Î ½ÇÇàÇÑ´Ù. »õ ½º·¹µå´Â ºÎ¸ðÀÇ ¼Ó¼ºÀ» µû¶ó °¡´Âµ¥ mainÀÌ »ç¿ëÀÚ ½º·¹µå¿©¼­ º¸ÅëÀº »ç¿ëÀÚ ½º·¹µå·Î »ý¼ºµÈ´Ù. µ¥¸ó ½º·¹µå·Î º¯°æÇÒ ¶§´Â ´ÙÀ½ ¸Þ¼­µå¸¦ È£ÃâÇÑ´Ù.

 

void setDaemon(boolean on)

boolean isDaemon()

 

»ý¼º Á÷ÈÄ start ¸Þ¼­µå¸¦ È£ÃâÇϱâ Àü¿¡ setDaemon(true)¸¦ È£ÃâÇÏ¿© µ¥¸ó ½º·¹µå·Î ÁöÁ¤ÇÑ´Ù. µ¥¸ó ½º·¹µå°¡ »ý¼ºÇÏ´Â ½º·¹µå´Â ÀÚµ¿À¸·Î µ¥¸ó ½º·¹µå°¡ µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

daemon

class JavaTest {

     public static void main(String[] args) {

          PrintThread worker = new PrintThread();

          worker.setDaemon(true);

          worker.start();

         

          for (int i = 0;i < 20;i++) {

              System.out.print(i);

              try { Thread.sleep(500); } catch (InterruptedException e) { ; }

          }

     }

}

 

class PrintThread extends Thread {

     public void run() {

          while(true) {

              System.out.print("save");

              try { Thread.sleep(2000); } catch (InterruptedException e) { ; }

          }

     }

}

½ÇÇà°á°ú

0123save456save78910save11121314save15161718save19

 

ÁÖ½º·¹µå´Â 20±îÁö Á¤¼ö¸¦ Ãâ·ÂÇϴµ¥ ¹®¼­¸¦ ÆíÁýÇÏ´Â ÀÛ¾÷À̶ó°í ÇÏÀÚ. ÁÖ½º·¹µå°¡ ÀÌ ÀÛ¾÷À» ÇÏ´Â µ¿¾È ÀÛ¾÷ ½º·¹µå´Â ÆíÁýµÈ ¹®¼­¸¦ 2ÃÊ °£°ÝÀ¸·Î ÀÚµ¿ ÀúÀåÇÑ´Ù. ½ÇÇàÇØ º¸¸é ÁÖ±âÀûÀ¸·Î ¹®¼­¸¦ ÀúÀåÇÏ¸ç »ó¿ë ¿öµå ÇÁ·Î¼¼¼­¿¡µµ ÀÌ·± ±â´ÉÀÌ ÀÖ´Ù. ÀÚµ¿ ÀúÀå ±â´ÉÀÌ º°µµÀÇ ½º·¹µå·Î ºÐ¸®µÇ¾î ÀÖ¾î ÀúÀåÁß¿¡µµ ¹®¼­¸¦ °è¼Ó ÆíÁýÇÒ ¼ö ÀÖ´Ù.

ÀÌ·± ¹é±×¶ó¿îµå 󸮴 Ƚ¼ö°¡ Á¤ÇØÁ® ÀÖÁö ¾Ê°í °è¼Ó ¹Ýº¹µÇ¹Ç·Î º¸Åë ¹«ÇÑ ·çÇÁ¸¦ µ·´Ù. ·çÇÁ¸¦ ºüÁ®³ª¿À´Â ±¸¹®ÀÌ ¾øÁö¸¸ ½ÇÁ¦·Î ¹«ÇÑÈ÷ ½ÇÇàµÇ´Â °ÍÀº ¾Æ´Ï¸ç µ¥¸ó ½º·¹µå·Î ÁöÁ¤µÇ¾î ÀÖ¾î ÁÖ½º·¹µå°¡ ³¡³ª¸é °­Á¦ Á¾·áµÈ´Ù. ÁÖ½º·¹µå°¡ ÆíÁý ÀÛ¾÷À» ¸¶Ä¡¸é ÀÚµ¿ ÀúÀå ÀÛ¾÷µµ ´õ ÇÒ ÇÊ¿ä ¾ø´Ù.

±×·¡¼­ ½º·¹µå »ý¼º Á÷ÈÄ¿¡ µ¥¸ó ½º·¹µå·Î ÁöÁ¤ÇÏ¿´´Ù. µ¥¸ó ½º·¹µå ÁöÁ¤À» ÁÖ¼® ó¸®Çϸé ÁÖ½º·¹µå°¡ Á¾·áµÇ¾îµµ ÀÚµ¿ ÀúÀå Äڵ带 °è¼Ó ½ÇÇàÇÏ´À¶ó ¿µ¿øÈ÷ Á¾·áµÇÁö ¾Ê´Â´Ù. ÇÁ·Î±×·¥ ½ÇÇà È帧°ú º°¹Ý »ó°üÀÌ ¾ø´Â Àå½Ä¼º ¾Ö´Ï¸ÞÀ̼Ç, ³×Æ®¿÷ Á¢¼Ó ´ë±â, ¹®¼­ Á¤·Ä ·çƾ µîÀº µ¥¸ó ½º·¹µå·Î ó¸®ÇÑ´Ù.