// import java.awt.*; import java.applet.*; class A implements Runnable { ThreadTest2 applet; A(ThreadTest2 app){ applet=app; // ¾ÖÇø´ À©µµ¿ì¿¡ ±×·¡ÇÈÀ» ±×¸®±â À§ÇØ ÀÎÀÚ·Î ³Ñ°Ü¹Þ¾Ò´Ù. } public void run () { Graphics g=applet.getGraphics(); // ±×·¡ÇÈ µð¹ÙÀ̽º¸¦ ¾ò´Â´Ù. g.drawString("¾²·¹µå A : (Ä«¿îÆ®°¡ 75°¡ µÇ¸é ¾²·¹µå B °ªÀ» °Ë»ç)", 5, 20); for (int i=0; i<150; i++) { g.drawRect(0, 30, i, 20); // »ç°¢ÇüÀ» ±×¸°´Ù. ÀÌ°ÍÀº ¾²·¹µåÀÇ ÀÛ¾÷À» ½Ã°¢ÀûÀ¸·Î ¹¦»çÇϱâ À§ÇØ »ç¿ëÇß´Ù. try {Thread.sleep(applet.WorkTimeA);} catch (InterruptedException e){} // HTML ¹®¼­¿¡ ÁöÁ¤ÇÑ °ª µ¿¾È sleep()ÇÑ´Ù. ÀÌ°ÍÀº ÀÛ¾÷ ½Ã°£À» ³ªÅ¸³½´Ù. if (i==75) { if (applet.IsDoneB != true) { // ¾²·¹µå B°¡ ¾ÆÁ÷ °á°ú¸¦ ³»Áö ¸øÇß´Ù. g.drawString("BÀÇ °á°ú¸¦ ±â´Ù¸®´Â µ¥ ½ÇÆÐ!", 5, 70); g.drawString("½ÇÆÐ",5, 85); } else { // ¾²·¹µå B°¡ ¼öÇàÀ» ³¡³»°í A°¡ ÇÊ¿ä·Î ÇÏ´Â °á°ú¸¦ ¸¸µé¾ú´Ù. g.drawString("BÀÇ °á°ú¸¦ ¾ò¾ú½À´Ï´Ù.", 5, 70); g.drawString("¼º°ø",5, 85); } } } applet.IsDoneA=true; // ¼öÇàÀÌ ³¡³ª¸é B°¡ ÇÊ¿ä·Î ÇÏ´Â °á°ú¸¦ ¸¸µç´Ù. } } class B implements Runnable { ThreadTest2 applet; B(ThreadTest2 app){ applet=app; // ¾ÖÇø´ À©µµ¿ì¿¡ ±×·¡ÇÈÀ» ±×¸®±â À§ÇØ ÀÎÀÚ·Î ³Ñ°Ü¹Þ¾Ò´Ù. } public void run () { Graphics g=applet.getGraphics(); // ±×·¡ÇÈ µð¹ÙÀ̽º¸¦ ¾ò´Â´Ù. g.drawString("¾²·¹µå B : (Ä«¿îÆ®°¡ 75°¡ µÇ¸é ¾²·¹µå A °ªÀ» °Ë»ç)", 5, 110); for (int i=0; i<150; i++) { g.drawRect(0, 120, i, 20); try {Thread.sleep(applet.WorkTimeB);} catch (InterruptedException e){} if (i==75) { if (applet.IsDoneA != true) { // ¾²·¹µå A°¡ ¾ÆÁ÷ °á°ú¸¦ ³»Áö ¸øÇß´Ù. g.drawString("AÀÇ °á°ú¸¦ ±â´Ù¸®´Â µ¥ ½ÇÆÐ!", 5, 160); g.drawString("½ÇÆÐ",5, 175); } else { // ¾²·¹µå A°¡ ¼öÇàÀ» ³¡³»°í B°¡ ÇÊ¿ä·Î ÇÏ´Â °á°ú¸¦ ¸¸µé¾ú´Ù. g.drawString("AÀÇ °á°ú¸¦ ¾ò¾ú½À´Ï´Ù.", 5, 160); g.drawString("¼º°ø",5, 175); } } } applet.IsDoneB=true; // ¼öÇàÀÌ ³¡³ª¸é A°¡ ÇÊ¿ä·Î ÇÏ´Â °á°ú¸¦ ¸¸µç´Ù. } } public class ThreadTest2 extends Applet { static boolean IsDoneA, IsDoneB=false; // A¿Í B ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ°Ô staticÀ¸·Î ¼±¾ð, ÃʱⰪÀº °ÅÁþ static int WorkTimeA, WorkTimeB; // HTML ¹®¼­¿¡¼­ º¯¼ö·Î ÀԷ¹޴ A¿Í BÀÇ ÀÛ¾÷ ½Ã°£ Thread t1, t2; public void init() { resize(300, 300); // ¾ÖÇø´ Å©±â¸¦ Æø 300, ³ôÀÌ 300 Çȼ¿·Î ÀçÁöÁ¤ÇÑ´Ù. String WorkA, WorkB; if ((WorkA=getParameter("WorkA"))==null) WorkTimeA=5; // HTML ¹®¼­¿¡¼­ WorkA°¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é 5·Î ÇÑ´Ù. else WorkTimeA=(Integer.valueOf(WorkA)).intValue(); // ½ºÆ®¸µÀ» int·Î ¹Ù²Þ if ((WorkB=getParameter("WorkB"))==null) WorkTimeB=5; // HTML ¹®¼­¿¡¼­ WorkB°¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é 5·Î ÇÑ´Ù. else WorkTimeB=(Integer.valueOf(WorkB)).intValue(); // ½ºÆ®¸µÀ» int·Î ¹Ù²Þ A a=new A(this); B b=new B(this); t1=new Thread(a); // A¸¦ ¼öÇàÇÒ ¾²·¹µå »ý¼º t2=new Thread(b); // B¸¦ ¼öÇàÇÒ ¾²·¹µå »ý¼º t1.start(); // A Ŭ·¡½ºÀÇ run() È£Ãâ t2.start(); // B Ŭ·¡½ºÀÇ run() È£Ãâ } public void stop() { IsDoneA=IsDoneB=false; // ¾ÖÇø´ ¼öÇàÀÌ ÁߴܵǸé ÃʱⰪÀ¸·Î } }