½º·¹µå¸¦ »ý¼ºÇÏ´Â ¹æ¹ýÀº µÎ °¡Áö·Î ³ª´©¾î »ý°¢ÇØ º¼ ¼ö ÀÖ½À´Ï´Ù. ThreadŬ·¡½º¸¦ »ó¼Ó ¹Þ´Â ¹æ¹ý°ú RunnableÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ±×°ÍÀÔ´Ï´Ù.
½º·¹µå¸¦ »ý¼ºÇÏ´Â µÎ °¡Áö ¹æ¹ý
n ThreadŬ·¡½º¸¦ »ó¼Ó ¹Þ´Â ¹æ¹ý
n RunnableÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ¹æ¹ý
ÀÌ µÎ °¡Áö ¹æ¹ýÀº ±× ³ª¸§´ë·Î Àå´ÜÁ¡ÀÌ ÀÖÁö¸¸ ÇϳªÀÇ ½º·¹µå·Î½á µ¿ÀÛÇÏ´Â °ÍÀº ¶È°°½À´Ï´Ù. À̵éÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ý·Ð¿¡ ´ëÇÏ¿© ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ±×¸®°í, 8.2.4Àý¿¡¼ ÀÌ ¹æ¹ýµé¿¡ ´ëÇÑ ½º·¹µåÀÇ ½ÇÁ¦ ¿¹Á¦¸¦ ´Ù·ç¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
»õ·Î¿î ½º·¹µå¸¦ »ý¼ºÇÏ´Â ¹æ¹ý Áß Thread Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© »ìÆìº¸¸é, ¸ÕÀú Thread Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© »õ·Î¿î Ŭ·¡½º¸¦ Çϳª ¸¸µé°í ThreadÀÇ run¸Þ¼µå¸¦ ÀçÁ¤ÀÇ ÇÕ´Ï´Ù. ´ë·«ÀûÀÎ ¹æ¹ýÀº ¾Æ·¡¿Í °°Àº ±¸Á¶·Î ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù.
ThreadŬ·¡½º¸¦ »ó¼Ó ¹Þ´Â ¹æ¹ý°ú run¸Þ¼µå ÀçÁ¤ÀÇ |
import java.lang.Thread; class NewThread extends Thread { public void run() { //........ // Thread Body //........ } //To do Something } |
run¸Þ¼µå´Â ¹Ýµå½Ã ÀçÁ¤ÀÇÇÏ¿© »ç¿ëÇÏ¿©¾ß ÇÕ´Ï´Ù. ½º·¹µåÀÇ »ý¸íÀº run¸Þ¼µå°¡ Á¾·áÇÏ¸é ½º·¹µåµµ °°ÀÌ Á¾·áÇÕ´Ï´Ù. Áï, run¸Þ¼µå¸¦ Á¾·áÇÏ¸é ½º·¹µå´Â »ç(ÞÝ)ÇÏ´Â °ÍÀÌÁö¿ä. |
ÀÌ ¶§, run ¸Þ¼Òµå´Â ½º·¹µåÀÇ ¸öü ¿ªÇÒÀ» ÇÕ´Ï´Ù. ´Ù½Ã ¸»Çؼ, ½º·¹µå¸¦ ½ÃÀÛ ½Ã۸é, ÀÌ run ¸Þ¼Òµå°¡ È£ÃâµÇ°í, run ¸Þ¼ÒµåÀÇ ¼öÇàÀÌ ³¡³ª¸é ½º·¹µå´Â Á¾·áÇÏ°Ô µË´Ï´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯ ¶§¹®¿¡ run ¸Þ¼Òµå ³»¿¡´Â ÁÖ·Î while ¹®À» »ç¿ëÇÏ¿© ¹«ÇÑ ·çÇÁ¸¦ ¹Ýº¹¼öÇàÇÏ°í °è¼ÓÇØ¼ »ì¾Æ ÀÖÀ» ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù. ±×¸®°í while¹® ³»ÀÇ Á¶°ÇÀ» ÀÌ¿ëÇÏ¿© ÀÌ ¹Ýº¹¹®À» Á¦¾îÇÏ°Ô µË´Ï´Ù.
n ½º·¹µåÀÇ Á×À½ = run¸Þ¼µåÀÇ Á¾·á
¸¸µé¾îÁø ½º·¹µå°¡ Runnable»óŰ¡ µÇ±â À§Çؼ´Â ¿ì¼±ÀûÀ¸·Î start()¸Þ¼µå¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ start()¸Þ¼µå´Â ThreadŬ·¡½ºÀÇ ¸â¹ö ¸Þ¼µå·Î½á start()¸¦ ÇÏ´Â ¼ø°£ run()¸Þ¼µå¸¦ ÀÚµ¿À¸·Î È£ÃâÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
n ½º·¹µåÀÇ ½ÃÀÛ à start() à run()
À§ÀÇ »õ·Î ¸¸µç Ŭ·¡½º¸¦ ½ÃÀÛÇÏ´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.
ThreadŬ·¡½º¸¦ »ó¼Ó ¹Þ¾ÒÀ» °æ¿ì ½º·¹µå¸¦ startÇÏ´Â ¹æ¹ý |
NewThread n = new NewThread();//½º·¹µåÀÇ »ý¼º n.start(); //½º·¹µåÀÇ ½ÃÀÛ |
ThreadŬ·¡½º¸¦ »ó¼ÓÇÏ¿© »õ·Î¿î ½º·¹µå¸¦ ¸¸µå´Â ¹æ¹ýÀ» ¿¹Á¦¸¦ ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
SoloThreadMain.java(½º·¹µå »ý¼ºÇÏ´Â ¹æ¹ý) |
class SoloThread extends Thread {//½º·¹µå»ó¼Ó private int number=0; public SoloThread(int n) { System.out.println(this.getName() + ":½º·¹µå½ÃÀÛ"); number = n; } public void run() { int i = 0; while(i < number) { System.out.print(this.getName() + ": "+ i + "\t"); i++; } System.out.println(this.getName() + ":½º·¹µåÁ¾·á"); } } public class SoloThreadMain { public static void main(String args[] ) { new SoloThread(10).start(); } } |
C:\examples\8. Thread>javac SoloThreadMain.java C:\examples\8. Thread>java SoloThreadMain Thread-0:½º·¹µå½ÃÀÛ Thread-0: 0 Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0:½º·¹µåÁ¾·á |
n ½º·¹µå¸¦ »ó¼ÓÇÏ¿© »õ·Î¿î ½º·¹µå¸¦ ¸¸µç´Ù.
1. class SoloThread extends Thread
n run¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÑ´Ù.
1. public void run() {
2. int i = 0;
3. while(i < number) {
4. System.out.print(this.getName() + ": "+ i + "\t");
5. i++;
6. }
7. System.out.println(this.getName() + ":½º·¹µåÁ¾·á");
n ½º·¹µå°¡ »ý¼ºµÇ°í ½ÃÀÛÇÏ´Â ±¸¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù.
1. new SoloThread(10).start();(runnable»óŰ¡ µË´Ï´Ù)
n ½º·¹µåÀÇ »ý¼º°ú ½ÃÀÛÀ» ÇϳªÀÇ ±¸¹®À¸·Î ¸¸µé¾ú´Âµ¥ ÀÌ ±¸¹®À» ºÐ¸®ÇØ º¸¸é ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.
1. SoloThread s = new SoloThread(10);
2. s.start();
n run ¸Þ¼µå°¡ ÀÛ¾÷À» ó¸®ÇÑ´Ù.
n run ¸Þ¼µå°¡ Á¾·áÇÏ¸é ½º·¹µå´Â Á״´Ù.
s.start()¸Þ¼µå¸¦ È£ÃâÇÏ°Ô µÇ¸é ÀÚµ¿À¸·Î run¸Þ¼µå¸¦ È£ÃâÇÏ°Ô µË´Ï´Ù. ½º·¹µå¸¦ »ý¼ºÇÑ ÈÄ start±îÁö ÇßÀ» ¶§ ÇØ´ç ½º·¹µå´Â Runnable»óŰ¡ µË´Ï´Ù. ±×¸®°í ÀÌ run¸Þ¼µå¸¦ ¼öÇàÇÏ°Ô µË´Ï´Ù. run¸Þ¼µåÀÇ ¼öÇàÀ» ´Ù ¸¶Ä£´Ù¸é ½º·¹µå´Â Á¾·áÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. ÇöÀçÀÇ SoloThread´Â ½º·¹µå·Î¼ÀÇ Àǹ̴ ¾ø½À´Ï´Ù. ´ÜÁö ½º·¹µå¸¦ »ý¼ºÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÙ »Ó ÁøÁ¤ÇÑ ½º·¹µå´Â ¾Æ´Õ´Ï´Ù.
½º·¹µå´Â »ý¼ºµÉ ¶§ ÀÚµ¿À¸·Î ½º·¹µåÀÇ À̸§À» ÇÒ´ç ¹Þ½À´Ï´Ù. À§ÀÇ ¼Ò½º¿¡¼ this.getName()À» È£ÃâÇϰí ÀÖ´Â °ÍÀº ÀÚµ¿À¸·Î ºÙ¿©Áø ½º·¹µåÀÇ À̸§À» ¾òÀ¸·Á°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ¸¸¾à »ç¿ëÀÚ°¡ Á÷Á¢ ½º·¹µåÀÇ À̸§À» ÁÖ°íÀÚ ÇÑ´Ù¸é ThreadÀÇ ¸â¹ö¸Þ¼µåÀÎ setName(String name)À» »ç¿ëÇÏ¸é µË´Ï´Ù.
±×·±µ¥, ÇѰ¡Áö ±â¾ïÇØ¾ß µÉ °ÍÀÌ ÀÖ½À´Ï´Ù. ½º·¹µå°¡ Á¾·áÇÑ´Ù°í ÇØ¼ SoloThread s°¡ »ç¶óÁö´Â °ÍÀº ¾Æ´Õ´Ï´Ù. s°¡ ¸Þ¸ð¸®¿¡¼ Á¦°ÅµÇ°Å³ª ¾ø¾îÁö´Â °ÍÀº ¾Æ´Ï¶ó´Â À̾߱âÁÒ.
½º·¹µå¸¦ »ý¼ºÇϱâ À§ÇÑ ´Ù¸¥ ¹æ¹ýÀº RunnableÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© ½º·¹µå¸¦ ±¸ÇöÇÏ´Â °ÍÀÔ´Ï´Ù. Runnable ÀÎÅÍÆäÀ̽º ³»¿¡ ´Ü Çϳª ¹Û¿¡ ¾ø´Â run ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ¿© ÇϳªÀÇ Å¬·¡½º¸¦ ¸¸µé°í ±× Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ ÈÄ, ÀÌ ÀνºÅϽº¸¦ Thread¸¦ »ý¼ºÇÒ ¶§ ¸Å°³º¯¼ö·Î ³Ñ°ÜÁÖ´Â °ÍÀÔ´Ï´Ù. ¾Æ·¡ÀÇ Ç¥´Â Runnable ÀÎÅÍÆäÀ̽ºÀÇ run ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ¿© »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µå´Â °ÍÀ» º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.
RunnableÀÎÅÍÆäÀ̽ºÀÇ ±¸Çö(run¸Þ¼µå ±¸Çö) |
import java.lang.Runnable; class NewRunnableThread implements Runnable { public void run() { // Thread Body } } |
RunnableÀº ÀÎÅÍÆäÀ̽º±â¶§¹®¿¡ ÇϳªÀÇ ½º·¹µå·Î½á µ¿ÀÛÇϱ⿡´Â ³Ê¹«³ª ¿ªºÎÁ·ÀÔ´Ï´Ù. ¾Ë°í º¸¸é RunnableÀÎÅÍÆäÀ̽º ¾È¿¡´Â run¹Û¿¡´Â ¾Æ¹«°Íµµ ¾ø½À´Ï´Ù. run¸Þ¼µå¸¦ ¸¸µå´Â °ÍÀº ThreadŬ·¡½º¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý°ú °°½À´Ï´Ù. À̰ÍÀº run¸Þ¼µå°¡ ¾ÆÁÖ Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÏÁö ¾Ê°Ú½À´Ï±î? À§¿¡¼ ¼³¸íÇÑ °Íó·³ ÀÌ run¸Þ¼µå°¡ Á¾·áÇϸé RunnableÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ¼ ¸¸µç ½º·¹µåµµ Á¾·áÇÏ°Ô µÇ¾î ÀÖ½À´Ï´Ù. ±×·¸´Ù¸é °ú¿¬ ¾î¶»°Ô RunnableÀÎÅÍÆäÀ̽º·Î ½º·¹µå¸¦ ¸¸µé±î¿ä? ±× ¹æ¹ýÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
Runnable ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© ½º·¹µå¸¦ »ý¼ºÇÏ°í ½ÃÀÛÇÏ´Â ¹æ¹ý |
Thread t = new Thread(new NewRunnableThread()); t.start(); |
RunnableÀÎÅÍÆäÀ̽º´Â run¹Û¿¡´Â ¾ø±â ¶§¹®¿¡ Ç¥ÁØ ThreadŬ·¡½ºÀÇ ¸öü¸¦ ºô·Á¼ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù. ±×·¡¼ ThreadŬ·¡½º¸¦ ÀÌ¿ëÇÏ¿© °´Ã¼¸¦ ¸¸µé ¶§ RunnableÀÎÅÍÆäÀ̽º¸¦ Thread»ý¼ºÀÚÀÇ ¸Å°³º¯¼ö·Î ³Ö¾î ÁÝ´Ï´Ù. RunanbleÀº ThreadŬ·¡½ºÀÇ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ »ý¼ºÀÚÀÇ ¸Å°³º¯¼öÇü½ÄÀ¸·Î µé¾î°¡¼ ÇϳªÀÇ ¿ÂÀüÇÑ ½º·¹µå°¡ µÇ´Â °ÍÀÔ´Ï´Ù. ¹°·Ð start¸Þ¼µå¸¦ È£ÃâÇÏ´Â °ÍÀº ¸¶Âù°¡ÁöÀÔ´Ï´Ù. RunnableÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© ½º·¹µå¸¦ ¸¸µå´Â ¹æ¹ýÀÇ ¿¹´Â ¾Æ·¡¿Í °°½À´Ï´Ù.
SoloRunnableMain.java(½º·¹µå »ý¼ºÇÏ´Â ¹æ¹ý) |
class SoloRunnable implements Runnable{ private int number=0; public SoloRunnable(int n) { System.out.println(":½º·¹µå½ÃÀÛ"); number = n; } public void run() { int i = 0; while(i < number) { System.out.print(i + "\t"); i++; } System.out.println(":½º·¹µåÁ¾·á"); } } public class SoloRunnableMain { public static void main(String args[] ) { new Thread(new SoloRunnable(10)).start(); } } |
C:\examples\8. Thread>javac SoloRunnableMain.java C:\examples\8. Thread>java SoloRunnableMain :½º·¹µå½ÃÀÛ 0 1 2 3 4 5 6 7 8 9 :½º·¹µåÁ¾·á |
ÀÌ ¿¹Á¦¿¡¼´Â Runnable ÀÎÅÍÆäÀ̽º¿¡¼ run¸Þ¼µå¸¦ ±¸ÇöÇÏ¿© ½º·¹µå¸¦ ¸¸µé°í ÀÖ½À´Ï´Ù. ¿©·¯ºÐµµ ¾Æ½Ã´Ù½ÃÇÇ ÀÏ´Ü RunnableÀ» ±¸ÇöÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
n class SoloRunnable implements Runnable
±×¸®°í run¸Þ¼µå¸¦ ¸¸µå´Â ¹æ¹ý ¶ÇÇÑ ¶È°°½À´Ï´Ù. ½º·¹µå°¡ startµÈ ÈÄ ¹Ù·Î run»óÅ·Πµé¾î°¡±â ¶§¹®¿¡ run¸Þ¼µå´Â ½º·¹µå¸¦ »ó¼Ó ¹ÞÀ» ¶§¿Í °°ÀÌ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ±×·±µ¥ Runnable·Î ±¸ÇöÇÑ run¸Þ¼µå ³»¿¡¼´Â this.getNameÀ» »ç¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù. À̰ÍÀº ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϱ⠶§¹®ÀÌÁÒ. ThreadŬ·¡½º¸¦ »ó¼Ó ¹Þ¾Ò´Ù¸é ºÎ¸ðÀÇ ¸Þ¼µå¸¦ ÀüºÎ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ RunnableÀÎÅÍÆäÀ̽ºÀ̱⠶§¹®¿¡ ±×·² ¼ö°¡ ¾ø´Â °ÍÀÌÁÒ.
RunnableÀÎÅÍÆäÀ̽º´Â »ý¼ºÇÏ´Â ¹æ¹ýÀÌ Thread¿Í ¾à°£ ´Ù¸£°Ô ³ªÅ¸³ª°í ÀÖ½À´Ï´Ù. ½ÇÁ¦ ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
n new Thread(new SoloRunnable(10)).start();
ÀÌ ÄÚµå´Â ÀÚ¹ÙÀÇ Ãà¾à¼º ¶§¹®¿¡ ³ª¿À´Â °ÍÀÌÁÒ. À̰ÍÀ» ´Ù½Ã ¸¸µç´Ù¸é ´ÙÀ½°ú °°ÀÌ µÉ °ÍÀÔ´Ï´Ù.
n SoloRunnable s = new SoloRunnable(10);
n Thread t = new Thread(s);
n t.start();
ÀϹÝÀûÀÎ ¹®¹ý¿¡ ÀÇÇϸé 3ÁÙ·Î ³ª´©¾î »ç¿ëÇÏ´Â °ÍÀÌ ¸Â½À´Ï´Ù. ±×·±µ¥ ÀÚ¹ÙÀÇ ÀåÁ¡ÀÌ ¹Ù·Î ÀÌ·¸°Ô ¿©·¯ ÁÙÀ» ´Ü ÇÑ ÁÙ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ¸Å·Âµµ ÀÖ½À´Ï´Ù. RunnableÀº ÀÎÅÍÆäÀ̽ºÀ̱⠶§¹®¿¡ run¸Þ¼µå·Î´Â ¾Æ¹«°Íµµ ÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¸±â ¶§¹®¿¡ Ç¥ÁØ ThreadŬ·¡½º¸¦ »ý¼ºÇÏ¿© ¸Å°³º¯¼öÀÇ Çü½ÄÀ¸·Î ½º·¹µå¸¦ »ý¼ºÇϰí start()¸Þ¼µå¸¦ È£ÃâÇÕ´Ï´Ù. ±×¸®°í start()¸Þ¼µå°¡ È£ÃâµÇ¾îÁø ÈÄ¿¡ run¸Þ¼µå°¡ ÀÚµ¿À¸·Î È£ÃâµÇ´Â °ÍÀº ThreadŬ·¡½º¸¦ »ó¼Ó¹Þ´Â ¹æ½Ä°ú µ¿ÀÏÇÕ´Ï´Ù.
ThreadŬ·¡½º¸¦ »ó¼Ó ¹Þ´Â °Í°ú RunnableÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó ¹Þ´Â °ÍÀº º°´Ù¸¥ Â÷À̰¡ ¾ø½À´Ï´Ù. ¾Ë°í º¸¸é ½º·¹µå·Î »ó¼Ó ¹Þ´Â ¹æ¹ýÀÌ ÈÙ¾À ÁÁ½À´Ï´Ù. »ó¼ÓÀÇ ÀåÁ¡À» ÃÖ´ëÇÑ »ì¸± ¼ö ÀÖ´Â °ÍÀÌÁÒ. ºÎ¸ðŬ·¡½ºÀÎ ThreadŬ·¡½ºÀÇ ¸Þ¼µå¸¦ ¸¶À½´ë·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ÀÚ¹Ù ÀÚüÀÇ ÀåÁ¡À̴ϱî¿ä. ÇÏÁö¸¸, ±»ÀÌ RunnableÀ» »ç¿ëÇÏ´Â °æ¿ì´Â ¿©·¯ºÐÀÇ Å¬·¡½º°¡ ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ ÀÌ¹Ì »ó¼ÓÀ» ¹Þ°í ÀÖ´Ù°í °¡Á¤ÇØ º¸½Ê½Ã¿À. ±×·¸´Ù¸é ¾î¶»°Ô ThreadŬ·¡½º¸¦ »ó¼ÓÇÒ±î¿ä? ÀÚ¹ÙÀÇ ±âº» ¹ýÄ¢»ó Áߺ¹»ó¼ÓÀº ±ÝÁöÇϰí ÀÖ½À´Ï´Ù. ±×·¡¼, RunnableÀ» ±¸ÇöÇÏ´Â ¹æ½ÄÀ¸·Î ´ëüÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ¾Æ·¡ÀÇ ¿¹Á¦´Â FrameÀÇ »ó¼ÓÀ¸·Î ÀÎÇØ Thread¸¦ »ó¼ÓÇÒ ¼ö ¾ø±â ¶§¹®¿¡ Runnable·Î ±¸ÇöÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.
SoloFrameMain.java |
import java.awt.*; class SoloFrame extends Frame implements Runnable{ private int number=0; public SoloFrame(int n) { System.out.println(":½º·¹µå½ÃÀÛ"); number = n; new Thread(this).start(); } public void run() { int i = 0; while(i < number) { System.out.print(i + "\t"); i++; } System.out.println(":½º·¹µåÁ¾·á"); } } public class SoloFrameMain { public static void main(String args[] ) { SoloFrame s = new SoloFrame(100); s.setSize(100,100); s.show(); } } |
C:\examples\8. Thread>javac SoloFrameMain.java C:\examples\8. Thread>java SoloFrameMain :½º·¹µå½ÃÀÛ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 :½º·¹µåÁ¾·á |
ÀÌ ¿¹Á¦¿¡¼ ¿©·¯ºÐÀº FrameÀ» »ó¼ÓÇÏ´Â °Í°ú RunnableÀ» µ¿½Ã¿¡ »ç¿ëÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
n class SoloFrame extends Frame implements Runnable
ÀÌ¿Í °°ÀÌ ´Ù¸¥ °ÍÀ» »ó¼ÓÇϰí ÀÖÀ» ¶§ Thread¸¦ »ó¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¸±â ¶§¹®¿¡ RunnableÀ» ÀÌ¿ëÇÏ¿© ½º·¹µå¸¦ ±¸ÇöÇϰí ÀÖ½À´Ï´Ù. ±×¸®°í ÇöÀçÀÇ SoloFrameÀ̶ó´Â Ŭ·¡½º´Â 2°³ÀÇ Å¬·¡½º¸¦ ¾Æ¹öÁö·Î Çϰí ÀÖ´Ù°í º¸½Ã¸é µÉ °ÍÀÔ´Ï´Ù. Frame°ú RunnableÀÌ ±×°ÍÀÌÁÒ. 5ÀåÀÇ ´ÙÇü¼º ºÎºÐ¿¡¼ ¿ì¸®´Â interface°¡ Ŭ·¡½ºÀÇ ÇÑ Á¾·ù¶ó´Â °ÍÀ» È®ÀÎÇß½À´Ï´Ù. interfaceµµ ÄÄÆÄÀÏÀ» Çϸé ÇϳªÀÇ Å¬·¡½º ÆÄÀÏÀÌ »ý¼ºµÇ´Â °ÍÀ» º¸¸é ´ç¿¬È÷ interfaceµµ Ŭ·¡½ºÀÔ´Ï´Ù. ±×¸®°í ÀÌ ÀÎÅÍÆäÀ̽º´Â Áߺ¹»ó¼ÓÀÇ °³³äÀ» Áö¿øÇϰí ÀÖ´Ù´Â °ÍÀ» ¹è¿ü½À´Ï´Ù. ±×·¸´Ù¸é, µÎ ºÎ¸ð¸¦ °¡Áø SoloFrameÀº FrameÀ¸·Îµµ UpcastingÀÌ °¡´ÉÇϰí Runnable·Îµµ UpcastingÀÌ °¡´ÉÇÕ´Ï´Ù.
SoloFrameÀ¸·Î ½º·¹µå¸¦ ¸¸µé°íÀÚ ÇÑ´Ù¸é ¿©·¯ºÐÀº ½º·¹µåÀÇ ¸Å°³º¯¼ö·Î RunnableÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. RunnableÀ» »ç¿ëÇÏ¿© Thread¸¦ ¸¸µé±â À§ÇÑ ½º·¹µåÀÇ »ý¼ºÀÚ ¸Þ¼µå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
n public Thread(Runnable target)
±×·±µ¥, ¸Å°³º¯¼ö·Î RunnableÇüÀ» ÁÖ¾î¾ß ÇÏÁö¸¸ À§ÀÇ Äڵ忡¼´Â new Thread(this)¶ó´Â °ÍÀ» »ç¿ëÇß½À´Ï´Ù.
n new Thread(this).start();
ÇöÀçÀÇ this´Â RunnableÀÌ ¾Æ´ÏÁö ¾Ê½À´Ï±î? this´Â ¹Ù·Î SoloFrame±× ÀÚüÀÔ´Ï´Ù.¸Å°³º¯¼ö¿¡ RunnableÀ» ³Ö¾î¾ß Çϴµ¥ SoloFrameÀ» ÇÒ´çÇϰí ÀÖ½À´Ï´Ù. À̰ÍÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â ¸Å°³º¯¼ö¸¦ ÇÒ´çÇÏ´Â ¼ø°£ SoloFrameÀ» Runnable·Î UpcastingÇϰí ÀÖ´Â °ÍÀÔ´Ï´Ù. ¸Å°³º¯¼öÀÇ ÇÒ´çÀ» ºÐ¼®ÇØ º¸¸é ´ÙÀ½°ú °°ÀÌ µË´Ï´Ù.
n Runnable target = this
this´Â ¾ðÁ¨°¡ °´Ã¼°¡ »ý¼ºµÇ¾îÁö¸é ±× °´Ã¼ÀÇ ·¹ÆÛ·±½º¸¦ ÀǹÌÇϱ⠶§¹®¿¡ main¿¡¼ new SoloFrame(100)À̶ó°í ÇßÀ» ¶§ ³Ñ¾î¿À´Â ·¹ÆÛ·±½º¸¦ ¹Þ´Â °ÍÀÔ´Ï´Ù. ±×·¸´Ù¸é À§ÀÇ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù.
n Runnable target = new SoloFrame(100);
À̰ÍÀº SoloFrameÀÇ ºÎ¸ðÀÎ Runnable·Î UpcastingÀ» Çϰí ÀÖ½À´Ï´Ù. ¿ì¸®´Â UpcastingÀ̶ó´Â °ÍÀ» ¾ÆÁÖ ¸¹ÀÌ »ç¿ëÇÏ¸é¼ ±× ¿ø¸®¸¦ ¸ð¸£°í »ç¿ëÇÑ °æ¿ìµµ ¸¹Àºµ¥ ¿©±â¼ Á¤È®ÇÏ°Ô ¾Ë¾Æ µÎ½Ã±â ¹Ù¶ø´Ï´Ù. ÀÏ´ÜÀº Runnable¸Å°³º¯¼ö¸¦ ³Ö¾î¾ß Çϴµ¥ ´ÙÀ½°ú °°ÀÌ ¸Å°³º¯¼ö¸¦ ÇÒ´ç¹Þ´Â ¼ø°£¿¡ ¾÷ij½ºÆÃÀ» Çϰí ÀÖ´Â °ÍÀÔ´Ï´Ù.
n new Thread(this).start();
ÀÌ¿Í °°Àº Upcasting±â¹ýÀ» ÀÌ¿ëÇÏ¿© SoloFrameÀÚü¸¦ ³Ö¾î¼ ½º·¹µå¸¦ »ý¼ºÇÏ°í ±×¸®°í start()¸Þ¼µå¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù. ¹°·Ð ½º·¹µå´Â SoloFrameÀÌ »ý¼ºµÇ´Â ¼ø°£¿¡ Threadµµ °°ÀÌ »ý¼ºµÇ¾î Ȱµ¿À» ÇÏ´Â °ÍÀÔ´Ï´Ù.
ÀÌ·Î½á ½º·¹µå¸¦ »ý¼ºÇÏ´Â ¹æ¹ý 2°¡Áö¿Í RunnableÀ» »ç¿ëÇÏ´Â ÀÌÀ¯¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù. ÇöÀç À§ÀÇ ¿¹Á¦µéÀº ½º·¹µå¸¦ »ý¼ºÇϰí start, Runnable»óÅ·ΠÀüÀÌ(ï®ì¹)ÇÏ´Â °Í¸¸À» ´Ù·ç¾ú½À´Ï´Ù. Not Runnable»óÅ·Πº¯È´Â °ÍÀ» ´ÙÀ½ Àý¿¡¼ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ ÀúÀÚ:ÃÖ¿µ°ü |