"½ÇÇàÁßÀÎ ÇÁ·Î±×·¥"À» ÇÁ·Î¼¼½º¶ó°íÇÑ´Ù. ±×·¯´Ï±î ¸í·É¾î¸¦ ÀÔ·ÂÇØ¼ µ¹¾Æ°¡´Â ÇÁ·Î±×·¥Àº ÀüºÎ ÇÁ·Î¼¼½ºÀΰÍÀÌ´Ù. ÇÁ·Î¼¼½º¿¡´Â ¸í·É¾îµéÀÌ ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÀ̵Ǵµ¥ À̰ÍÀ» ½ÇÇà ¾²·¹µåÇϰí ÇÑ´Ù. ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÇ´Â ¸í·É¾îµéÀ» ÇϳªÀÇ ½Ç·Î ²ê ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·¸°Ô ÇϳªÀÇ ½Ç·Î ²ê ¼ö ÀÖ´Â ÇÁ·Î±×·¥Àº ´ÜÀÏ ¾²·¹µå ÇÁ·Î±×·¥À̶ó°í ÇÑ´Ù. ±×·±µ¥ ¾î¶² ÇÁ·Î±×·¥¿¡´Â ¿©·¯ °³ÀÇ ÇÔ¼öµéÀÌ ¼·Î µ¶¸³ÀûÀ¸·Î ¼öÇàµÇ´Â °æ¿ìµµ ÀÖ´Ù. ÀÌ·± °æ¿ì¿¡´Â ¸í·É¾îµéÀÌ ¼øÂ÷ÀûÀ¸·Î ¼öÇàµÇ´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ÇϳªÀÇ ½Ç·Î ²ê¼ö ¾øÀ» °ÍÀÌ´Ù. ÀÌ·± ÇÁ·Î±×·¥Àº ´ÙÁß ¾²·¹µå ÇÁ·Î±×·¥À̶ó°í ÇÑ´Ù.
´ÙÀ½ ±×¸²Àº ¼¼Â÷ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. È«±æµ¿ÀÌ ½ºÄÉÁìÇ¥¿¡ ³ª¿Í Àִ´ë·Î ¼¼Â÷¸¦ Çϰí ÀÖ´Ù.
¿©±â¼ ½ºÄÉÁìÇ¥´Â ÇÁ·Î±×·¥ ¸í·É¾îµéÀ̰í, ½ºÄÉÁìÇ¥´ë·Î ÀÏÀ» ÇÏ´Â È«±æµ¿Àº ¾²·¹µå°¡ µÈ´Ù.
È«±æµ¿ÀÌ ¼¼Â÷Çϱâ À§ÇØ »ç¿ëÇÏ´Â ºñ´©, ¹°, È£¼ö µîÀº ½Ã½ºÅÛ ÀÚ¿øµéÀÌ´Ù.
´ÙÀ½ ±×¸²Àº È«±æµ¿ÀÌ µÎ µ¿»ý(È«±æ¼÷, È«±æÂù)À» µ¥¸®°í ¼¼Â÷¸¦ Çϰí ÀÖ´Ù. ÀÌ ¼¼¸íÀº °¢ÀÚ ½ºÄÉÁì
¿¡ ¸Â°Ô Àڽſ¡°Ô ÇÒ´çµÈ ÀÏÀ» ÇÑ´Ù. ½ºÄÉÁìÇ¥´Â ÇÁ·Î±×·¥ ¸í·É¾îµéÀ̰í, È«±æµ¿, È«±æ¼÷, È«±æÂùÀº
ÀÏÀ» ÇÏ´Â ¾²·¹µåÀÌ´Ù. ÀÌ·¸°Ô ÀÏÇÏ´Â ¾²·¹µå°¡ ¸¹Àº ÇÁ·Î±×·¥À» ´ÙÁß ¾²·¹µå ÇÁ·Î±×·¥À̶ó°í ÇÑ´Ù.
¿ì¼± Á÷°üÀûÀ¸·Î ºÁµµ ´ÙÁß ¾²·¹µå ÇÁ·Î±×·¥ÀÌ ´ÜÀÏ ¾²·¹µå ÇÁ·Î±×·¥º¸´Ù È¿À²ÀûÀÏ °ÍÀÌ´Ù.
´ÙÁß ¾²·¹µå¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÌ ´ëºÎºÐ È¿°úÀûÀÌÁö¸¸ Ç×»ó ±×·± °ÍÀº ¾Æ´Ï´Ù. "»ç°øÀÌ ¸¹À¸¸é
¹è°¡ »êÀ¸·Î °£´Ù"¶ó´Â ¼Ó´ãÀÌ ÀÖ´Â °Í ó·³ ¾²·¹µå°¡ ¸¹À¸¸é ¾î¶² °æ¿ì¿¡´Â ºñÈ¿À²ÀûÀÎ °æ¿ìµµ ÀÖ´Ù.

¾²·¹µå´Â Thread Ŭ·¡½º·Î ºÎÅÍ »ó¼ÓÀ» ¹Þ¾Æ¼ ¸¸µé¼öµµ ÀÖ°í, Runnable ÀÎÅÍÆäÀ̽º¸¦ ÀÎÇø®¸àÃ÷ÇØ¼ »ç¿ëÇÒ ¼ö µµ ÀÖ´Ù. µÎ°¡Áö ¹æ¹ýÁß¿¡¼ ÇÁ·Î±×·¡¸Ó´Â ±×¶§ ±×¶§ »óȲ¿¡ ¸Â°Ô »ç¿ëÇÏ¸é µÈ´Ù. µÎ ¹æ¹ý ¸ðµÎ ¾²·¹µå¸¦ »ç¿ëÇÏ·Á¸é run() ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ run()ÇÔ¼ö¿¡ ¾²·¹µå°¡ ÀÏÇÒ ÀÛ¾÷ÀÇ ³»¿ëÀ» ±â¼úÇØ ³õ´Â °ÍÀÌ´Ù.
¾²·¹µå¸¦ ¸¸µç ´ÙÀ½¿¡ ¾²·¹µå¸¦ ½ÇÇà ½ÃŰ·Á¸é start()ÇÔ¼ö¸¦ È£ÃâÇØÁÖ¾î¾ß ÇÑ´Ù. start() ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÚµ¿ÀûÀ¸·Î run()ÇÔ¼ö°¡ ¼öÇàµÈ´Ù. ¾²·¹µå´Â run()ÇÔ¼ö¸¦ ¸¶Ä¡°Å³ª stop()ÇÔ¼ö°¡ È£ÃâµÇ¸é ½ÇÇàÀ» Á¾·áÇÑ´Ù. Á¾·áµÈ ¾²·¹µå´Â start()ÇÔ¼ö·Î ´Ù½Ã ½ÇÇà½Ãų ¼ö´Â ¾ø´Ù.
¾²·¹µåÀÇ ½ºÄÉÁ층Àº ÀÚ¹Ù °¡»ó ¸Ó½Å¿¡¼ ÀÌ·ç¾îÁø´Ù. ÀÚ¹Ù °¡»ó ¸Ó½ÅÀº ¿ì¼± ¼øÀ§¿¡ µû¶ó ¼±Á¡ ¹æ½Ä(preemtive) ¹æ½ÄÀ¸·Î ½ºÄÉÁ층µÈ´Ù. ¼±Á¡¹æ½ÄÀ̶õ ¿ì¼± ¼þÀ§°¡ ³ôÀº ¾²·¹µå°¡ µîÀåÇϸé ÇöÀç ½ÇÇàÁßÀÎ ¾²·¹µå´Â Âϰܳª°í ¿ì¼±¼øÀ§°¡ ³ôÀº ¾²·¹µå°¡ ½ÇÇàµÇ´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿ì¼± ¼øÀ§°¡ ³·Àº ¾²·¹µå´Â ¿ì¼± ¼øÀ§°¡ ³ôÀº ¾²·¹µå°¡ Á¾·áÇϰųª sleep, blocked µÉ¶§ ±îÁö ±â´Ù·Á¾ß ÇÑ´Ù.
¿¹Á¦: CountThread
CountThread.java ÆÄÀÏ
1 class CountThread extends Thread {
2 int maxcount;
3
4 CountThread(int maxcount) {
5 this.maxcount = maxcount;
6 }
7
8 public void run() {
9
10 for(int count = 1;count
¾²·¹µå°¡ Á¾·áµÇ¸é ThreadDeath ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ¾î¶² °æ¿ì¿¡´Â ¾²·¹µå°¡ Á¾·áÇϱâ Àü¿¡ ²À ÇØÁÖ¾î¾ß ÇÒ
ÀϵéÀÌ ÀÖÀ» ¼öµµ ÀÖ´Ù. ÀÌ·± °æ¿ì¿¡ ¾²·¹µå°¡ Á¾·áÇÒ ¶§ ¹ß»ýµÇ´Â ThreadDeath ¿¹¿Ü¸¦ Àâ¾Æ¼ ¾²·¹µå Á¾·á
Á÷Àü¿¡ ÇÊ¿äÇÑ ÀÛ¾÷µéÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. ¸ðµç ÀÛ¾÷ÀÌ Ã³¸®µÈ ´ÙÀ½¿¡´Â ThreadDeath ¿¹¿Ü¸¦ ´Ù½Ã throw
ÇØÁÖ¾î¾ß ÇÑ´Ù.
CatchDeath.java ÆÄÀÏ
1 class MyThread extends Thread {
2 MyThread(String name) {
3 super(name);
4 }
5
6 public void run() {
7 try {
8 while (true) {
9 sleep(500);
10 System.out.println(getName() + ": is running");
11 }
12 } catch (ThreadDeath ouch) {
13 System.out.println("I ("+getName() + ") is being killed.");
14 throw(ouch);
15 } catch (InterruptedException e) {}
16 }
17 }
18
19 public class CatchDeath {
20 static public void main(String args[]) {
21 MyThread thr_a = new MyThread("A");
22
23 System.out.println("Starting the thread...");
24 thr_a.start();
25
26 try {
27 Thread.sleep(2000);
28 } catch (InterruptedException e) {}
29
30 System.out.println("Stopping the thread...");
31 thr_a.stop();
32 }
33 }
°á°ú
% java CatchDeath
Starting the thread...
A: is running
A: is running
A: is running
Stopping the thread...
I (A) is being killed.
¼³¸í
3 super(name);
¾²·¹µå¿¡ À̸§À» ºÙÀ̱â À§Çؼ Thread(String name) »ý¼ºÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. super(name)Àº »óÀ§ Ŭ·¡½ºÀÇ
»ý¼ºÀÚ, Áï Thread(String name)¸¦ ÀǹÌÇÑ´Ù.
12 } catch (ThreadDeath ouch) {
13 System.out.println("I ("+getName() + ") is being killed.");
14 throw(ouch);
¾²·¹µå°¡ Á¾·áµÇ¸é ThreadDeath ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. 13¹øÂ° ÁÙ¿¡¼ ¾²·¹µå°¡ Á¾·áÇϱâ Àü¿¡ ó¸®ÇÒ ÀÛ¾÷µéÀ» ó¸®ÇÒ
¼ö ÀÖ´Ù. ÀÛ¾÷ÀÌ ³¡³ª¸é ThreadDeath ¿¹¿Ü¸¦ ´Ù½Ã throw ÇØ¼ ¾²·¹µå°¡ Á¾·áµÇµµ·ÏÇÑ´Ù.
8.2 ÀÚ¹Ù ¾²·¹µå
´ÙÀ½Àº ¾²·¹µåÀÇ »óŵµÀÌ´Ù. ¾²·¹µå´Â »ý¼ºÀÚ¸¦ ÅëÇØ »ý¼ºµÇ¸é Newborn »óÅ¿¡ ÀְԵȴÙ. Newborn »óÅ¿¡¼
start() ¸Þ¼Òµå°¡ È£ÃâµÇ¸é Runnable »óÅ·ΠÀüÀ̵ȴÙ. Runnable »óÅ´ ¾²·¹µå°¡ CPUÀÇ µð½ºÆÐÄ¡(dispatch) Å¥
(queue)¿¡ µî·ÏµÈ »óÅÂÀÌ´Ù. Runnable »óÅ¿¡¼ Running »óÅ·ÎÀÇ ÀüÀÌ´Â ¿î¿µÃ¼Á¦¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î ÀÌ·ç¾îÁø´Ù.
Runnable »óÅ¿¡ ¿ì¼± ¼øÀ§¿¡ µû¶ó °¡Àå ³ôÀº ¿ì¼± ¼øÀ§ÀÇ ¾²·¹µå°¡ Running »óÅ·ΠÀüÀ̵ȴÙ. Running »óÅ´Â
¾²·¹µå°¡ CPU¸¦ Â÷ÁöÇÏ°í ½ÇÇàÁßÀÎ »óÅÂÀÌ´Ù. ¾²·¹µå°¡ Â÷ÁöÇϰí ÀÖ´Â CPU¸¦ ´Ù¸¥ ¾²·¹µå¿¡ ³Ñ°ÜÁÖ±â À§Çؼ´Â
suspend()/sleep()/wait() ¸Þ¼Òµåµé°ú yield() ¸Þ¼Òµå°¡ ÀÖ´Ù. suspend()/sleep()/wait() ¸Þ¼ÒµåµéÀº ¾²·¹µå¸¦
ºí¶ô»óÅ·ΠÀüÀÌÇØ¼ ´Ù¸¥ ¾²·¹µå¿¡°Ô CPU¸¦ ³Ñ°ÜÁÖ´Â ÇüÅÂÀ̰í, yield() ¸Þ¼Òµå´Â ¾²·¹µå°¡ Runnable »óÅ·Î
ÀüÀÌÇØ¼ ´Ù¸¥ ¾²·¹µå¿¡ CPU¸¦ ³Ñ°ÜÁÙ ¼ö ÀÖ´Ù. ±×·±µ¥ µÎ Á¾·ùÀÇ ¸Þ¼Òµå¿¡´Â ½ºÄÉÁ층¿¡ ¾à°£ÀÇ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù.
suspend()/sleep()/wait() ¸Þ¼ÒµåµéÀº ¾²·¹µå°¡ ºí¶ôµÇ±â ¶§¹®¿¡ CPU¸¦ ´Ù¸¥ ¾²·¹µå¿¡°Ô ³Ñ°ÜÁÖÁö¸¸, yield()
¸Þ¼Òµå´Â Runnable »óÅ·Π°¡±â ¶§¹®¿¡ ÇöÀç ¾²·¹µå°¡ ¿ì¼± ¼øÀ§°¡ °¡Àå ³ô´Ù¸é ´Ù½Ã CPU¸¦ ÀâÀ» ¼ö ÀÖ´Ù´Â
°ÍÀÌ´Ù. ÀÌ·¸°ÔµÇ¸é ¿ì¼± ¼øÀ§°¡ ³·Àº ¾²·¹µåµéÀº CPU¸¦ Â÷ÁöÇØ¼ ½ÇÇàÇÒ ±âȸ¸¦ ¾òÀ» ¼ö ¾øÀ» ¼öµµ ÀÖ´Ù.
suspend()¸Þ¼Òµå¿¡ ÀÇÇØ ºí¶ôµÈ ¾²·¹µå´Â resume() ¸Þ¼Òµå¸¦ ÅëÇØ ºí¶ô »óÅ¿¡¼ Runnable »óÅ·ΠÀüÀÌ ÇÒ ¼ö ÀÖ´Ù.
¹Ý¸é¿¡ wait() ¸Þ¼Òµå¿¡ ÀÇÇØ ºí¶ôµÈ ¾²·¹µå´Â notify() ¸Þ¼Òµå¸¦ ÅëÇØ¼ ºí¶ô »óÅ¿¡¼ Runnalbe »óÅ·ΠÀüÀÌ
µÉ ¼ö ÀÖ´Ù. sleep() ¸Þ¼Òµå¿¡ ÀÇÇØ ºí¶ôµÈ ¾²·¹µå´Â ÀÏÁ¤ ½Ã°£ÀÌ µÇ¸é ÀÚµ¿ÀûÀ¸·Î Runnable »óÅ·ΠÀüÀ̵ȴÙ.
ÀÚ¹Ù¿¡¼ ¾²·¹µå´Â ½ÇÁ¦ ¿î¿µÃ¼Á¦ÀÇ ¾²·¹µå·Î ¸ÅÇÎÀÌ ÀÌ·ç¾îÁ®¾ß ½ÇÁ¦·Î ¾²·¹µå·Î¼
ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. UNIX³ª NT, Win95, OS/2 µîÀÌ ¾²·¹µå¸¦ Áö¿øÇÏ´Â ¹æ½ÄÀÌ ´Ù¸£±â
¶§¹®¿¡ ÀÚ¹Ù ¾²·¹µå¿Í ½ÇÁ¦ ¿î¿µÃ¼Á¦ÀÇ ¾²·¹µå¿Í ¸ÅÇÎÀÌ ´Þ¶óÁú ¼ö ÀÖ´Ù.
½ÇÁ¦ ¿î¿µÃ¼Á¦¿¡¼ ¾²·¹µå´Â »ç¿ëÀÚ ¾²·¹µå¿Í Ä¿³Î ¾²·¹µå·Î ±¸ºÐµÈ´Ù. »ç¿ëÀÚ ¾²·¹µå´Â
»ç¿ëÀÚ°¡ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇØ¼ ¸¸µç ¾²·¹µåÀ̰í, Ä¿³Î ¾²·¹µå´Â ½ÇÁ¦ ½ºÄÉÁ층ÀÌ ÀϾ´Â
½ºÄÉÁ층 ´ÜÀ§°¡ µÈ´Ù. »ç¿ëÀÚ ¾²·¹µå¿Í Ä¿³Î ¾²·¹µå´Â M-1 °ü°è, 1-1 °ü°è, M-N °ü°è¸¦
°®À» ¼ö ÀÖ´Ù. NT ¿Í Win95´Â 1-1 °ü°èÀÇ ´ëÇ¥ÀûÀÎ ¿¹À̰í, M-NÀº Solaris ¾²·¹µåÀÇ ´ëÇ¥ÀûÀÎ
¿¹ÀÌ´Ù. ÀÚ¹Ù ¾²·¹µå´Â ÀÏÁ¾ÀÇ »ç¿ëÀÚ ¾²·¹µåÀÌ´Ù.
M-1 ¸ÅÇÎ
ÀÚ¹Ù ¾²·¹µå´Â »ç¿ëÀÚ ¾²·¹µå¿Í 1:1 °ü°è¸¦ °®°í, »ç¿ëÀÚ ¾²·¹µå´Â Ä¿³Î ¾²·¹µå¿Í M:1 °ü°è¸¦
°®´Â´Ù. µû¶ó¼, Ä¿³Î ¾²·¹µå´Â Çϳª¸¸ Àֱ⠶§¹®¿¡ ´ÙÁß ¾²·¹µåÀÇ ÀåÁ¡À» »ì¸®Áö ¸øÇϰí ÀÖ´Ù.
M-1 ¸ÅÇÎÀÇ ´ëÇ¥ÀûÀÎ ¿¹´Â green_threads ÀÌ´Ù. ¼Ö¶ó¸®½º 2.4, 2.5 ¿î¿µÃ¼Á¦¿¡ Á¦°øµÇ´Â JDK´Â
¸ðµÎ green_threads¸¦ »ç¿ëÇϰí ÀÖ´Ù.

One-One ¸ÅÇÎ
1:1 ¸ÅÇÎ °ü°è´Â NT, Win95¿¡¼ »ç¿ëµÇ´Â ¾²·¹µåÀÌ´Ù. ÀÚ¹Ù ¾²·¹µå 1°³¿¡ Ä¿³Î ¾²·¹µå°¡ 1°³
¸ÅÇεDZ⠶§¹®¿¡ ´ÙÁß ¾²·¹µåÀÇ ÀåÁ¡À» Àß »ì¸± ¼ö ÀÖ´Ù.

M-N ¸ÅÇÎ
¼Ö¶ó¸®½º 2.6¿¡¼ Áö¿øµÇ´Â ÀÚ¹Ù native ¾²·¹µå¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡, C ¾ð¾î¿¡¼ ¾²·¹µå¸¦
»ç¿ëÇÏ´Â °Íó·³ ¾²·¹µå¸¦ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó´Â ¿øÇÏ´Â °æ¿ì »ç¿ëÀÚ ¾²·¹µå°¡
¿øÇÏ´Â ¸¸ÅÀÇ Ä¿³Î ¾²·¹µå¿Í ¸ÅÇÎÀ̵ǵµ·Ï ÇÁ·Î±×·¥ ÇÒ ¼ö ÀÖ´Ù. NTÀÇ 1:1 ¸ÅÇκ¸´Ù ÇÁ·Î±×·¡¸Ó
°¡ ÇÁ·Î±×·¥Çϴµ¥ Æí¸®Çϸé¼, ´ÙÁß ¾²·¹µåÀÇ ÀåÁ¡À» ÃÖ´ëÇÑ È°¿ëÇÒ ¼ö ÀÖ´Ù.
