½º·¹µå´Â Äڵ尡 ½ÇÇàµÇ´Â È帧À̸ç ÀÌ ¾È¿¡¼ ´ëÀÔ¹®, Á¶°Ç¹®, ·çÇÁ, ¸Þ¼µå È£Ãâ µîÀÌ ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÈ´Ù. Æù ³ëÀ̸¸Çü ÄÄÇ»ÅÍ´Â ¿øÄ¢ÀûÀ¸·Î ÇÑ ¹ø¿¡ ÇϳªÀÇ Àϸ¸ ÇÒ ¼ö ÀÖÀ¸¸ç ¼ø¼¸¦ ¾î±æ ¼ö ¾ø´Ù. º¸ÅëÀÇ ÇÁ·Î±×·¥Àº mainÀ¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ÇϳªÀÇ ½ÇÇà È帧¸¸ °¡Áö¸ç
¼Ò½º¿¡ ±â·ÏµÈ Äڵ带 ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÇÏ´Â ½Ì±Û ½º·¹µå ±¸Á¶ÀÌ´Ù.
¿©·¯ °³ÀÇ ÀÛ¾÷À» µ¿½Ã¿¡ ÇÒ °æ¿ì ŸÀ̸ӳª ¾ÆÀ̵é ŸÀÓ µîÀÇ Æí¹ýÀ» ¾²±âµµ ÇÏÁö¸¸ ÀüüÀûÀÎ ¼Óµµ°¡ ÀúÇÏµÇ°í ¹ÝÀÀ¼ºµµ
¶³¾îÁø´Ù. ÀÌ¿¡ ºñÇØ ¸ÖƼ ½º·¹µå´Â ½ÇÇà È帧À» ¿©·¯ °³ °¡Áö´Â ±¸Á¶ÀÌ´Ù. ¸ÞÀÎ ½º·¹µå¿¡¼ ÇÊ¿äÇÒ ¶§¸¶´Ù ½º·¹µå¸¦ Ãß°¡·Î »ý¼ºÇÏ¿© ÀÛ¾÷À» ºÐ´ã½ÃŲ´Ù. º¹¼ö
°³ÀÇ Äڵ尡 µ¿½Ã ´Ù¹ßÀûÀ¸·Î ½ÇÇàµÇ¾î ¿©·¯ °¡Áö ÀÏÀ» º´·Ä ó¸®ÇÒ ¼ö ÀÖ´Ù.
¿î¿µÃ¼Á¦´Â CPUÀÇ ½Ã°£À» Àß°Ô Á¶±ú ±³´ë·Î ½º·¹µå¸¦ ½ÇÇàÇÏ¿© µ¿½Ã¿¡
¿©·¯ °¡Áö ÀÏÀ» ó¸®ÇÏ´Â °Íó·³ Èä³»³»´Âµ¥ ÀÌ·± ¹æ½ÄÀ» ¶ó¿îµå ·ÎºóÀ̶ó°í ÇÑ´Ù. º´·Ä¼ºÀÌ Çâ»óµÇ´Â ÀÌÁ¡ÀÌ
ÀÖÁö¸¸ CPUÀÇ ¼Óµµ°¡ À¯ÇÑÇÏ°í ÀÛ¾÷ ÀüȯÀ¸·Î ÀÎÇØ ÀüüÀûÀÎ ¼º´ÉÀº ¿ÀÈ÷·Á ¶³¾îÁú ¼öµµ ÀÖ´Ù. Äھ ¿©·¯ °³ÀÎ CPU´Â ½º·¹µå ó¸® ´É·ÂÀÌ Å¹¿ùÇÏ¿© ¸ÖƼ ½º·¹µå¸¦
È°¿ëÇÏ´Â °ÍÀÌ È°½ÇÈ÷ À¯¸®ÇÏ´Ù.
¸ÖƼ ½º·¹µå »ç¿ë ¿©ºÎ´Â ÇÁ·Î±×·¥ÀÇ Æ¯¼º¿¡ µû¶ó °áÁ¤ÇÑ´Ù. ¹é±×¶ó¿îµå
ÀÛ¾÷ÀÌ ¸¹À» ¶§ ÀûÇÕÇÏ¸ç »ç¿ëÀÚ¸¦ ´ë¸éÇÏ´Â ÀÛ¾÷Àº ½Ì±Û ½º·¹µå°¡ ¾î¿ï¸°´Ù. °³¹ß°ú Å×½ºÆ®°¡ ¾î·Á¿ö ³ôÀº
¼÷·Ãµµ¸¦ ¿äÇÏ¸ç ±Ô¸ð°¡ Ä¿Áö¸é µ¿±âÈ°¡ °ñÄ¡ ¾ÆÇÁ´Ù.
ÆíÁý±â·ù³ª ¸ÖƼ¹Ìµð¾î, À¥ ºê¶ó¿ìÀú µîÀÇ ÀϹÝÀûÀÎ ÀÀ¿ë ÇÁ·Î±×·¥µµ
¸ÖƼ ½º·¹µå¸¦ Àû±Ø È°¿ëÇÏ´Â Ãß¼¼ÀÌ´Ù. ƯÈ÷ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ó¸®ÇÏ´Â ¼¹ö ÇÁ·Î±×·¥Àº ´ÙÁß Á¢¼ÓÀ»
¿øÈ°È÷ ó¸®Çϱâ À§ÇØ ¸ÖƼ ½º·¹µå°¡ ÇʼöÀûÀÌ´Ù. ÁÖ·Î ¼¹ö °³¹ß¿¡ È°¿ëµÇ´Â ÀÚ¹Ù ¾ð¾îÀÇ Æ¯¼º»ó ¸ÖƼ
½º·¹µå´Â ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÏ´Â ±â¼úÀÌ´Ù.
¸ÖƼ ½º·¹µå´Â ¾ð¾îÀÇ ±â´ÉÀÌ ¾Æ´Ï¶ó ÇÁ·Î±×·¥À» ±¸µ¿ÇÏ´Â ¿î¿µÃ¼Á¦ÀÇ ±â´ÉÀÌ´Ù. ¹ü¿ë
¾ð¾îÀÎ C++Àº ¸ÖƼ ½º·¹µå¿¡ ¾ÈÁ¤ÀûÀÎ ±¸Á¶¸¸ Á¦°øÇÒ »Ó ¸ÖƼ ½º·¹µå ±â´É ÀÚü´Â Á¦°øÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ÀÚ¹Ù´Â ½ÇÇà ȯ°æÀÎ °¡»ó ¸Ó½ÅÀÌ Ç÷§Æû Â÷¿ø¿¡¼ ¸ÖƼ ½º·¹µå¸¦ Áö¿øÇÑ´Ù. °¡»ó ¸Ó½ÅÀÌ ¹Ì´Ï ¿î¿µÃ¼Á¦¿©¼ ÁÖ °³¹ß ¾ð¾îÀÎ ÀÚ¹Ùµµ ½º·¹µå¸¦ Á÷Á¢ Áö¿øÇÑ´Ù.
ÀÚ¹Ù ÇÁ·Î±×·¥Àº main¿¡¼ ½ÃÀÛÇϸç mainÀÌ ÁÖ ½º·¹µåÀÌ´Ù. ÃÖÃÊ ½ÇÇàµÉ ¶§´Â ÁÖ ½º·¹µå Çϳª¹Û¿¡ ¾øÁö¸¸
¹é±×¶ó¿îµå ÀÛ¾÷ÀÌ ÇÊ¿äÇÒ ¶§ Ãß°¡·Î ½º·¹µå¸¦ ´õ ¸¸µç´Ù. ½º·¹µåµµ ÇϳªÀÇ Å¬·¡½º·Î Ç¥ÇöµÈ´Ù. ½º·¹µå °ü·Ã ±â´ÉÀº Thread Ŭ·¡½º¿¡ ĸ½¶ÈµÇ¾î ÀÖÀ¸¸ç »ý¼ºÀÚ´Â
´ÙÀ½°ú °°´Ù. ¿É¼ÇÀ¸·Î À̸§À» ÁÙ ¼ö ÀÖÁö¸¸ Àß »ç¿ëµÇÁö´Â ¾Ê´Â´Ù.
Thread([String name])
Thread(Runnable target, [String name])
Thread Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹Þ°í
run ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© ½ÇÇàÇÒ Äڵ带 ±â¼úÇÑ´Ù. run ¸Þ¼µå´Â ½º·¹µåÀÇ ÁøÀÔÁ¡À̸ç
½º·¹µåÀÇ mainÀÌ´Ù. run¿¡¼ ÀÛ¾÷À» ó¸®Çϸç runÀÌ ¸®ÅÏÇÏ¸é ½º·¹µåµµ Á¾·áµÈ´Ù. ½Ã½ºÅÛ¿¡ ÀÇÇØ ¿ÜºÎ¿¡¼ È£ÃâµÇ¹Ç·Î
¹Ýµå½Ã publicÀ̾î¾ß Çϸç Àμöµµ ¸®ÅÏ°ªµµ ¾ø´Ù.
public void run()
½º·¹µå Ŭ·¡½º¸¦ Á¤ÀÇÇÑ ÈÄ main¿¡¼ ½º·¹µå °´Ã¼¸¦ »ý¼ºÇÑ´Ù. »ý¼º ÈÄ¿¡ À̸§À̳ª ¿ì¼±¼øÀ§ µîÀÇ ¼Ó¼ºÀ» º¯°æÇÒ ¼ö ÀÖÁö¸¸ µðÆúÆ®°¡ ¹«³ÇØ ²À Á¶Á¤ÇÏÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù. ½º·¹µå °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ ´ÙÀ½ ¸Þ¼µå·Î ±âµ¿ÇÑ´Ù.
void start()
start´Â ½º·¹µå¸¦ À§ÇÑ ³»ºÎÀûÀÎ °ü¸® °´Ã¼¿Í È£Ãâ ½ºÅÃÀ» »ý¼ºÇÏ¿©
½ÇÇà ´ë±â »óÅ·Π¸¸µé¾î µÎ¸ç ½Ã½ºÅÛÀº Àû´çÇÑ ¶§¿¡ run ¸Þ¼µå¸¦ È£ÃâÇÏ¿© »õ·Î¿î ½ÇÇà È帧À» ±âµ¿½ÃŲ´Ù. ÀÌÈÄ ¸ÞÀÎ ½º·¹µå¿Í ÀÛ¾÷ ½º·¹µå´Â º°µµÀÇ ½ÇÇà È帧À» °¡Áö¸ç º´·ÄÀûÀ¸·Î ½ÇÇàµÈ´Ù.
¹é±×¶ó¿îµå ÀÛ¾÷À» ó¸®ÇÏ´Â ½º·¹µå´Â ½ÇÇà ¸ð½ÀÀÌ º¸ÀÌÁö ¾Ê´Â °æ¿ì°¡ ¸¹´Ù. ÇнÀÀ»
À§ÇÑ ¿¹Á¦¿¡¼´Â ½º·¹µåÀÇ µ¿ÀÛÀ» ´«À¸·Î È®ÀÎÇØ¾ß ÇϹǷΠ¹®ÀÚ¸¦ ¹Ýº¹ÀûÀ¸·Î Ãâ·ÂÇÏ¿´´Ù. ÅؽºÆ® ȯ°æÀ̶ó
´ú Á÷°üÀûÀε¥ ±×·¡ÇÈ È¯°æÀ̶ó¸é ¾Ö´Ï¸ÞÀ̼ÇÀ̳ª »ç¿îµå Àç»ý µîµµ ó¸®ÇÒ ¼ö ÀÖ´Ù.
thread |
|
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) { ; } } } } 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) { ; } } } } |
|
½ÇÇà°á°ú |
XOXXOXXOXXOXXOXXXOXOXXOXXOXXOXXXOXOXXOXXOXXXOOOOOOOOOOOOOOOO |
main¿¡¼ ½ÃÀÛÇÏ´Â ÁÖ½º·¹µå´Â
0.2ÃÊ¿¡ ÇÑ ¹ø¾¿ O ¹®ÀÚ¸¦ Ãâ·ÂÇÑ´Ù. ÀÔ·ÂÀ»
¹Þ°Å³ª ȸé UI¸¦ °»½ÅÇÏ´Â ÀÛ¾÷À̶ó°í °¡Á¤ÇÏÀÚ. ¹é±×¶ó¿îµå¿¡¼
ó¸®ÇÒ ÀÛ¾÷ÀÌ ÀÖ´Ù¸é ½º·¹µå¸¦ Çϳª ´õ »ý¼ºÇÑ´Ù. Thread·ÎºÎÅÍ »ó¼Ó¹ÞÀº PrintThread Ŭ·¡½º¸¦ ¼±¾ðÇÏ°í run ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© 0.1ÃÊ¿¡ ÇÑ ¹ø¾¿ X ¹®ÀÚ¸¦ Ãâ·ÂÇÑ´Ù. º¹ÀâÇÑ ¼öÇÐÀû °è»êÀ̳ª ³×Æ®¿÷ ÀÔÃâ·Â ÀÛ¾÷À̶ó°í °¡Á¤ÇÏÀÚ.
Áß°£¿¡ »ðÀÔµÈ sleep ¹®ÀåÀº °á°ú¸¦ õõÈ÷ »ìÆ캸±â À§ÇØ ÀǵµÀûÀ¸·Î
»ðÀÔÇÑ °ÍÀÌ´Ù. ½º·¹µå Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í main¿¡¼ ½º·¹µå
°´Ã¼ worker¸¦ »ý¼ºÇÑ´Ù. ±×¸®°í start ¸Þ¼µå¸¦ È£ÃâÇÏ¸é ½º·¹µå°¡ ±âµ¿µÇ¾î ½ÇÇàÀ» ½ÃÀÛÇÑ´Ù. ÀÛ¾÷
½º·¹µå°¡ µ¿ÀÛÀ» ½ÃÀÛÇÏ¿© 2°³ÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÈ´Ù.
ÁÖ ½º·¹µå´Â O¸¦ Âï°í ÀÛ¾÷ ½º·¹µå´Â X¸¦ Âï´Â´Ù. O¿Í X°¡
¹ø°¥¾Æ Ãâ·ÂµÇ¾î µÎ ½º·¹µå°¡ ±³´ë·Î ½ÇÇàµÊÀ» ½Ã°¢ÀûÀ¸·Î È®ÀÎÇÒ ¼ö ÀÖ´Ù. CPU´Â ½Ã°£À» °øÆòÇÏ°Ô ºÐ¹èÇÏÁö¸¸
ÀÛ¾÷ ½º·¹µå´Â 0.1ÃÊ ½¬°í ÁÖ ½º·¹µå´Â 0.2ÃÊ ½¬¾î ÀÛ¾÷
½º·¹µå°¡ ´õ ¸¹Àº ½Ã°£À» »ç¿ëÇÏ¸ç ´õ »¡¸® ³¡³½´Ù.
µÎ ½º·¹µå°¡ ¸ðµÎ ½ÇÇàÀ» ¸¶Ä¡¸é ÇÁ·Î±×·¥µµ Á¾·áµÈ´Ù. ÀÌ ¿¹Á¦¸¦ ½Ì±Û
½º·¹µå·Î ´Ù½Ã ÀÛ¼ºÇØ º¸ÀÚ. ±×·¯¸é main¿¡¼ ½ÃÀÛÇÏ´Â
ÁÖ ½º·¹µå¿¡¼ O Ãâ·Â°ú X Ãâ·ÂÀ» ¸ðµÎ ó¸®ÇØ¾ß ÇÑ´Ù.
singlethread |
|
class JavaTest { public
static void main(String[] args) { for
(int num = 0;num < 30;num++) { System.out.print("O"); try
{ Thread.sleep(200); } catch (InterruptedException e) { ; } } for
(int num = 0;num < 30;num++) { System.out.print("X"); try
{ Thread.sleep(100); } catch (InterruptedException e) { ; } } } } |
|
½ÇÇà°á°ú |
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
ÇÑ ½º·¹µå¿¡¼´Â ÀÛ¾÷À» ¼øÂ÷ÀûÀ¸·Î ó¸®ÇÏ´Ï O¸¦ ´Ù Ãâ·ÂÇÑ ÈÄ¿¡¾ß X°¡ Ãâ·ÂµÈ´Ù. ÀüüÀûÀΠó¸® ½Ã°£Àº °°Áö¸¸ º´·Ä 󸮰¡ ¾ÈµÈ´Ù. ÀÌ ¿¹¸¦ ÅëÇØ ½Ì±Û ½º·¹µå¿Í ¸ÖƼ ½º·¹µå°¡ ¾î¶»°Ô ´Ù¸¥Áö, ¿Ö ¸ÖƼ
½º·¹µå¸¦ ½á¾ß ÇÏ´ÂÁö °¨À» ÀâÀ» ¼ö ÀÖ´Ù. µÎ °¡Áö ÀÌ»óÀÇ ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®Çϱâ À§ÇØ ½º·¹µå¸¦ »ç¿ëÇÑ´Ù.
Thread Ŭ·¡½º¸¦ »ó¼Ó¹Þ´Â ¹æ¹ýÀÌ Á¦ÀÏ °£´ÜÇÏÁö¸¸ ÀÚ¹Ù ¾ð¾îÀÇ
Ư¼º»ó »ó¼ÓÀÌ ¾î·Á¿î °æ¿ìµµ ÀÖ´Ù. ÀÌ·² ¶§´Â run ¸Þ¼µå¸¦
Á¤ÀÇÇÏ´Â Runnable ÀÎÅÍÆäÀ̽ºÀÇ ±¸Çö Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í ÀÌ Å¬·¡½ºÀÇ °´Ã¼¸¦ ThreadÀÇ »ý¼ºÀÚ·Î Àü´ÞÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. run ¸Þ¼µå¸¦
´©°¡ ±¸ÇöÇϴ°¡ÀÇ Â÷À̸¸ ÀÖÀ» »Ó °ÅÀÇ °°Àº ¹æ¹ýÀÌ´Ù.
runnable |
class JavaTest { public
static void main(String[] args) { PrintRunnable
print = new PrintRunnable(); Thread
worker = new Thread(print); worker.start(); for
(int num = 0;num < 30;num++) { System.out.print("O"); try
{ Thread.sleep(200); } catch (InterruptedException e) { ; } } } } class PrintRunnable implements Runnable { public
void run() { for
(int num = 0;num < 30;num++) { System.out.print("X"); try
{ Thread.sleep(100); } catch (InterruptedException e) { ; } } } } |
PrintRunnable Ŭ·¡½º´Â
Runnable ÀÎÅÍÆäÀ̽ºÀÇ run ¸Þ¼µå¸¦ ±¸ÇöÇ쵂 ÇÏ´Â ÀÛ¾÷Àº ¾Õ ¿¹Á¦¿Í °°´Ù. main¿¡¼ PrintRunnable °´Ã¼¸¦ »ý¼ºÇÏ¿© ThreadÀÇ »ý¼ºÀÚ·Î ³Ñ±â¸é ÀÌ °´Ã¼ÀÇ run ¸Þ¼µå°¡ ½º·¹µåÀÇ
ÁøÀÔÁ¡À¸·Î »ç¿ëµÈ´Ù. ½º·¹µå °´Ã¼ÀÇ start ¸Þ¼µå¸¦ È£ÃâÇϸé
»õ·Î¿î ½º·¹µå°¡ »ý¼ºµÇ¸ç ·¯³Êºí °´Ã¼ÀÇ run ¸Þ¼µå°¡ ½ÇÇàÀ» ½ÃÀÛÇÑ´Ù.
½º·¹µå¸¦ »ý¼ºÇÏ´Â Çü½Ä¸¸ ´Ù¸¦ »Ó run ¸Þ¼µåÀÇ ÄÚµå´Â °°¾Æ ½ÇÇà
°á°úµµ µ¿ÀÏÇÏ´Ù. °á±¹ ¾î¶² ¹æ¹ýÀ» ¾²°Ç ½º·¹µåÀÇ ÀÛ¾÷ Äڵ带 °¡Áö´Â
void run() ¸Þ¼µå¸¦ Á¤ÀÇÇÏ°í ½Ã½ºÅÛÀ¸·Î ÇÏ¿©±Ý ÀÌ ¸Þ¼µå¸¦ È£ÃâÇÏ¿© ½º·¹µå¸¦ ±âµ¿ÇÏ°Ô ¸¸µç´Ù.
Thread Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹Þ´Â ¹æ¹ý¿¡ ºñÇØ ÇÑ ´Ü°è ´õ °ÅÃÄ ¹ø°Å·Ó°í
Á÷°üÀûÀÌÁö ¸øÇÏ´Ù. ÀÚ¹ÙÀÇ ¾ð¾î Ư¼º»ó ´ÙÁß »ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ·± ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
runnable2 |
class JavaTest { public
static void main(String[] args) { PrintRunnable
print = new PrintRunnable(); Thread
worker = new Thread(print); worker.start(); for
(int num = 0;num < 30;num++) { System.out.print("O"); try
{ Thread.sleep(200); } catch (InterruptedException e) { ; } } } } class PrintClass { public
void printChar() { for
(int num = 0;num < 30;num++) { System.out.print("X"); try
{ Thread.sleep(100); } catch (InterruptedException e) { ; } } } } class PrintRunnable extends PrintClass
implements Runnable { public
void run() { printChar(); } } |
PrintClassÀÇ
printChar ¸Þ¼µå´Â X ¹®ÀÚ¸¦ ¹Ýº¹ÀûÀ¸·Î Ãâ·ÂÇÑ´Ù.
ÀÌ Å¬·¡½º¸¦ »ó¼Ó¹Þ¾Æ ÀçÁ¤ÀÇÇÑ ÈÄ º°µµÀÇ ½º·¹µå¿¡¼ ½ÇÇàÇÏ°í ½Í´Ù°í ÇÏÀÚ. PrintClass¸¦
¼öÁ¤ÇÏ·Á¸é ÀÌ Å¬·¡½º¸¦ »ó¼Ó¹Þ¾Æ¾ß ÇÏ°í ½º·¹µå¿¡¼ ½ÇÇàÇÏ°í ½ÍÀ¸¸é Thread·ÎºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù. ¿øÇϴ´ë·Î ÇÏÀÚ¸é ´ÙÀ½ ±¸¹®ÀÌ ÇÊ¿äÇÏ´Ù.
class PrintThread extends PrintClass, Thread {
¾ÈŸ±õ°Ôµµ ÀÚ¹Ù´Â µÎ °³ÀÇ ºÎ¸ð Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹Þ´Â ´ÙÁß »ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. ±×·¡¼ run ¸Þ¼µå¸¦ °¡Áö´Â ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó¹Þ¾Æ run ¸Þ¼µå¸¦ ±¸ÇöÇÑ´Ù. ÀÎÅÍÆäÀ̽º´Â °³¼ö¿¡ »ó°ü¾øÀÌ ¾ó¸¶µçÁö ±¸ÇöÇÒ
¼ö ÀÖ´Ù.
PrintRunnable Ŭ·¡½º´Â ¹®ÀÚ¸¦ Ãâ·ÂÇÏ´Â PrintClass¸¦ »ó¼Ó¹ÞÀ¸¸é¼ ½º·¹µåÀÇ ÁøÀÔÁ¡ÀÎ run ¸Þ¼µå¸¦
°¡Áø´Ù. main¿¡¼ ÀÌ °´Ã¼¸¦ »ý¼ºÇÏ¿© ThreadÀÇ »ý¼ºÀÚ·Î
³Ñ±â¸ç ½Ã½ºÅÛÀº ÀÌ °´Ã¼ÀÇ run ¸Þ¼µå¸¦ È£ÃâÇÏ¿© ½º·¹µå¸¦ ±âµ¿½ÃŲ´Ù.
¾ÕÀÇ Runnable »ç¿ë ¿¹Á¦´Â ÀÍ¸í ³»ºÎ Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ´õ
°£´ÜÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. µü ÇϳªÀÇ °´Ã¼¸¸ »ý¼ºÇϹǷΠ±»ÀÌ
PrintRunnableÀ̶ó´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ÇÊ¿ä ¾øÀÌ À͸íÀÇ Å¬·¡½º·ÎºÎÅÍ »ý¼ºµÈ ¸â¹ö¸¦ ¼±¾ðÇÏ¿© ÀÌ ¸â¹ö¸¦ ThreadÀÇ »ý¼ºÀÚ·Î ³Ñ±â¸é µÈ´Ù.
runnable3 |
class JavaTest { public
static void main(String[] args) { Thread
worker = new Thread(mRunnable); worker.start(); for
(int num = 0;num < 30;num++) { System.out.print("O"); try
{ Thread.sleep(200); } catch (InterruptedException e) { ; } } } static
Runnable mRunnable = new Runnable() { public
void run() { for
(int num = 0;num < 30;num++) { System.out.print("X"); try
{ Thread.sleep(100); } catch (InterruptedException e) { ; } } } }; } |
Ŭ·¡½º ¼±¾ð¹®ÀÌ »ç¶óÁ® °£´ÜÇØÁ³´Ù. ·¯³ÊºíÀº µü ÇϳªÀÇ °´Ã¼¸¸ ÇÊ¿äÇϹǷÎ
±»ÀÌ °´Ã¼¸¦ »ý¼ºÇÒ ÇÊ¿ä ¾øÀÌ °´Ã¼ »ý¼º¹®À» ThreadÀÇ »ý¼ºÀÚ ¾È¿¡ Áý¾î ³Ö¾î ¹ö¸®¸é ´õ ª°Ô ÁÙÀÏ
¼ö ÀÖ´Ù.
runnable4 |
class JavaTest { public
static void main(String[] args) { Thread
worker = new Thread(new Runnable() { public
void run() { for
(int num = 0;num < 30;num++) { System.out.print("X"); try
{ Thread.sleep(100); } catch (InterruptedException e) { ; } } } }); worker.start(); for
(int num = 0;num < 30;num++) { System.out.print("O"); try
{ Thread.sleep(200); } catch (InterruptedException e) { ; } } } } |
±æÀÌ´Â ÈξÀ ª¾ÆÁ³Áö¸¸ ÀÌ·± ±¸¹®À» óÀ½ º¸´Â Ãʺ¸ÀÚ¿¡°Ô´Â »ó´çÈ÷ ³ÇØÇØ º¸ÀδÙ. ¼÷·ÃÀÚ´Â ÀÌ·± Äڵ带 ¸¹ÀÌ »ç¿ëÇϸç ƯÈ÷ ±×·¡ÇÈ È¯°æ¿¡¼ ÀÌ·± ½ÄÀÇ Àӽà °´Ã¼¸¦ ¸¹ÀÌ È°¿ëÇÑ´Ù.
»ý¼º °¡´ÉÇÑ ½º·¹µåÀÇ °³¼ö¿¡ ¹°¸®Àû Á¦ÇÑÀº ¾øÁö¸¸ ½º·¹µå °ü¸®¸¦ À§ÇÑ Á¤º¸¿Í È£Ãâ ½ºÅÃÀ» À§ÇØ ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇϱâ
¶§¹®¿¡ ¹«ÇÑÈ÷ »ý¼ºÇÒ ¼ö´Â ¾ø´Ù. ¶Ç CPUÀÇ Ã³¸® ¼Óµµ¿¡µµ
ÇÑ°è°¡ ÀÖ¾î ³Ê¹« ¸¹ÀÌ ¸¸µé¸é ÀüüÀûÀÎ ¼º´ÉÀÌ ¶³¾îÁø´Ù.
±×·¯³ª Àû¾îµµ ¹®¹ýÀûÀ¸·Î´Â Á¦¾àÀÌ ¾ø¾î ¿øÇϴ¸¸Å ¸¸µé¾îµµ »ó°ü¾ø´Ù. ½ÇÁ¦
¼¹ö ÇÁ·Î¼¼½º´Â ´ÙÁß »ç¿ëÀÚ¸¦ ´ë±âÇϱâ À§ÇØ ¼ö¹é °³ÀÇ ½º·¹µå¸¦ »ý¼ºÇÏ¿© µ¹¸®±âµµ ÇÑ´Ù. ÀÛ¾÷ ½º·¹µå´Â
º¸Åë ¹é±×¶ó¿îµå¿¡¼ °£´ÜÇÑ ÀÛ¾÷À» Çϰųª ¿ìµÎÄ¿´Ï ¾É¾Æ ¿äûÀ» ´ë±âÇÏ´Â °æ¿ì°¡ ¸¹¾Æ ÁÖ ½º·¹µå¿¡ ºñÇØ CPU ½Ã°£À»
¸¹ÀÌ ¼Ò¸ðÇÏÁö ¾Ê´Â´Ù.
½º·¹µåµµ ÇϳªÀÇ Å¬·¡½ºÀ̹ǷΠ°íÀ¯ÇÑ ¸â¹ö¸¦ °¡Áú ¼ö ÀÖ°í ¸â¹ö¿¡ µû¶ó Á¶±Ý¾¿ ´Ù¸£°Ô µ¿ÀÛÇÒ ¼ö ÀÖ´Ù. ¸¶Ä¡ ¸Þ¼µå Çϳª·Î Àμö¸¦ ¹Ù²ã°¡¸ç ¿©·¯ °¡Áö ÀÏÀ» ÇÒ ¼ö ÀÖ´Â °Í°ú ¸¶Âù°¡ÁöÀÌ´Ù. ¾Õ¿¡¼ ¸¸µç PrintThread´Â ¹«Á¶°Ç X¹®ÀÚ¸¦ Ãâ·ÂÇßÁö¸¸ ÀÌ °ªÀ» ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ.
multithread |
|
import java.awt.Toolkit; class JavaTest { public
static void main(String[] args) { PrintThread
worker1 = new PrintThread('X'); worker1.start(); PrintThread
worker2 = new PrintThread('.'); worker2.start(); BeepThread
beep = new BeepThread(5, 1000); beep.start(); for
(int num = 0;num < 30;num++) { System.out.print("O"); try
{ Thread.sleep(200); } catch (InterruptedException e) { ; } } } } class PrintThread extends Thread { char
ch; PrintThread(char
ch) { super(); this.ch
= ch; } public
void run() { for
(int num = 0;num < 30;num++) { System.out.print(ch); try
{ Thread.sleep(100); } catch (InterruptedException e) { ; } } } } class BeepThread extends Thread { int
count; int
gap; Toolkit
tool = Toolkit.getDefaultToolkit(); BeepThread(int
count, int gap) { this.count
= count; this.gap
= gap; } public
void run() { for
(int num = 0;num < count;num++) { tool.beep(); try
{ Thread.sleep(gap); } catch (InterruptedException e) { ; } } } } |
|
½ÇÇà°á°ú |
.XXO.X.XO.X.X.OX.OX.X.OX.X.O.XX.OX.X.OX..XXO.X.XO.X..OXX.OX.X.O.XX.OX.X. XO.OOOOOOOOOOOOOOO |
PrintThread¿¡ ch ¸â¹ö¸¦
¼±¾ðÇÏ°í »ý¼ºÀÚ¸¦ ÅëÇØ Ãâ·ÂÇÒ ¹®ÀÚ¸¦ Àü´Þ¹Þ¾Æ run ¸Þ¼µåÀÇ for
·çÇÁ¿¡¼ ch ¹®ÀÚ¸¦ Âï´Â´Ù. ÀÛ¾÷ ½º·¹µåÀÇ
»ý¼ºÀÚ·Î ¾î¶² ¹®ÀÚ¸¦ ³Ñ±â´Â°¡¿¡ µû¶ó Ãâ·ÂµÇ´Â ¹®ÀÚ°¡ ´Þ¶óÁø´Ù. Ãâ·Â °³¼ö, Áö¿¬ ½Ã°£µµ Àμö·Î Àü´ÞÇÏ¿© ½º·¹µå¸¶´Ù ´Ù¸£°Ô ó¸®ÇÒ ¼ö ÀÖ´Ù.
BeepThread´Â »ý¼ºÀÚÀÇ Àμö·Î Àü´Þ¹ÞÀº count Ƚ¼ö¸¸Å gap °£°ÝÀ¸·Î ¼Ò¸®¸¦ Ãâ·ÂÇÑ´Ù. ¼Ò¸®´Â Toolkit°´Ã¼ÀÇ
beep ¸Þ¼µå·Î Ãâ·ÂÇϴµ¥ ½ºÇÇÄ¿·Î ¶ò¶òÇϴ û°¢ÀûÀÎ Ãâ·ÂÀ» ³½´Ù. »ç¿îµå ÆÄÀÏÀ» »ç¿ëÇϸé
ÀÓÀÇÀÇ ¼Ò¸®¸¦ ³¾ ¼öµµ ÀÖ´Ù.
main¿¡¼ µÎ °³ÀÇ
PrintThread ÀÛ¾÷ ½º·¹µå¸¦ »ý¼ºÇ쵂 °¢°¢ X¿Í
. ¹®ÀÚ¸¦ Àü´ÞÇß´Ù. BeepThread´Â ÃÊ´ç ÇÑ ¹ø¾¿ ÃÑ ´Ù¼¸ ¹ø ¼Ò¸®¸¦ ³½´Ù. ¼¼ ÀÛ¾÷ ½º·¹µå¸¦ ±âµ¿½ÃÅ°¸é ÁÖ ½º·¹µå±îÁö ÃÑ ³× °³ÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÈ´Ù. Äֿܼ¡ ¼¼ °³ÀÇ ¹®ÀÚ°¡ ¹ø°¥¾Æ ³ªÅ¸³ª°í ½ºÇÇÄ¿¿¡¼´Â ¼Ò¸®°¡ ³´Ù.
½º·¹µå´Â °´Ã¼ÀÌ¸ç ½ÇÇàÁß¿¡ ¾ó¸¶µçÁö »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¹é±×¶ó¿îµå¿¡¼
ó¸®ÇÒ ÀÛ¾÷ÀÌ ÀÖ´Ù¸é ½º·¹µå °´Ã¼¸¦ »ý¼ºÇÏ¿© start ¸Þ¼µå·Î ±âµ¿¸¸ ½ÃÅ°¸é µÈ´Ù. ÀÛ¾÷ ½º·¹µå´Â ¹é±×¶ó¿îµå¿¡¼ ¹¬¹¬È÷ ÀÚ½ÅÀÇ ÇÒÀÏÀ» ó¸®ÇÏ°í run ¸Þ¼µå°¡
Á¾·áµÇ¸é Á¶¿ëÈ÷ »ç¶óÁø´Ù.
²À °°Àº Á¾·ùÀÇ ½º·¹µå°¡ ¾Æ´Ï¾îµµ »ó°ü¾ø´Ù. ÀμâÇÏ´Â ½º·¹µå, °è»êÇÏ´Â ½º·¹µå, ³×Æ®¿÷¿¡¼ ´Ù¿î·Îµå ¹Þ´Â ½º·¹µå¸¦ °¢°¢ ÇÊ¿äÇѸ¸Å
µ¿½Ã¿¡ ½ÇÇàÇصµ ¹«¸®¾øÀÌ Àß µ¹¾Æ°£´Ù. ¿ÀÇǽº³ª ºê¶ó¿ìÀú µî ¿ì¸®°¡ ´Ã»ó »ç¿ëÇÏ´Â ÇÁ·Î±×·¥µµ ¹é±×¶ó¿îµå¿¡¼
¼ö½Ê °³ÀÇ ½º·¹µå¸¦ ½ÇÇàÇÑ´Ù.