Subject : Java Multi Thread ±¸Çö ¿¹

Solution Description:
=====================

  ¾²·¹µå¶õ ÀڽŸ¸ÀÇ Á¦¾îÈ帧À» °®°í¼­ µ¶¸³ÀûÀ¸·Î ½ÇÇàµÇ´Â ¿­µéÀ»
  ¾²·¹µå¶ó°í Çϸç ÇÑ ÇÁ·Î±×·¥¿¡¼­ ¿©·¯°³ÀÇ ¾²·¹µå¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù¸é
  ´ÙÁß ¾²·¹µùÀ̶ó ÇÑ´Ù.

  ´ÙÁßÇÁ·Î±×·¡¹ÖÀº ¿©·¯°³ÀÇ ÇÁ·Î±×·¥À» ³í¸®ÀûÀ¸·Î µ¿½Ã¿¡ ½ÇÇàÇÏ´Â °ÍÀ̸ç
  ´ÙÁß¾²·¹µùÀº ÇÑ ÇÁ·Î¼¼½ºÀÇ context³»¿¡¼­ µ¿½Ã¼ºÀ» Á¦°øÇÏ°í ´ÙÁßÇÁ·Î±×·¡¹ÖÀº
  ÇÁ·Î¼¼½º°£ÀÇ µ¿½Ã¼ºÀ» Á¦°øÇÑ´Ù´Â Á¡¿¡¼­ ´Ù¸£´Ù.


     Multi Programming
     -----------------                    --------
    |    Program 1    |                  |  CPU 1 |
    |-----------------|                   --------
    |    .            |                      .
    |    .            |<-------------------- .
    |    .            |                      .
    |-----------------|                   --------
    |    Program n    |                  |  CPU m |
    |                 |                   --------
     ------------------


     Multi Threading
    ------------------------              --------
   | Program 1 (Thread 1-1) |            |  CPU 1 |
   |           (Thread 1-i) |             --------
   |------------------------|
   | .                      |                .
   | .                      |<-------------- .
   | .                      |                .
   |------------------------|             --------
   | Program n (Thread n-1) |            |  CPU m |
   |           (Thread n-i) |             --------
    -------------------------



   - Thread ÀÀ¿ë ÇÁ·Î±×·¥ ¿¹Á¦


    class SimpleThread extends Thread {
        public SimpleThread(String str) {
            super(str);
        }
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(i + " " + getName());
                try {
                    sleep((int)(Math.random() * 1000));
                } catch (InterruptedException e) {}
            }
            System.out.println("DONE! " + getName());
        }
    }




    class TwoThreadsTest {
        public static void main (String[] args) {
            new SimpleThread("Jamaica").start();
            new SimpleThread("Fiji").start();
        }
    }



   - µ¿±âÈ­µÈ Thread ÀÀ¿ë ÇÁ·Î±×·¥ ¿¹Á¦

    class CubbyHole {
        private int contents;
        private boolean available = false;

        public synchronized int get() {
            while (available == false) {
                try {
                    wait();
                } catch (InterruptedException e) {
                }
            }
            available = false;
            notifyAll();
            return contents;
        }

        public synchronized void put(int value) {
            while (available == true) {
                try {
                    wait();
                } catch (InterruptedException e) {
                }
            }
            contents = value;
            available = true;
            notifyAll();
        }
    }


    class Consumer extends Thread {
         private CubbyHole cubbyhole;
         private int number;

         public Consumer(CubbyHole c, int number) {
               cubbyhole = c;
               this.number = number;
         }

         public void run() {
               int value = 0;
               for (int i = 0; i < 10; i++) {
                    value = cubbyhole.get();
                    System.out.println("Consumer #" + this.number + " got: " + value);
               }
         }
    }



    class Producer extends Thread {
        private CubbyHole cubbyhole;
        private int number;

        public Producer(CubbyHole c, int number) {
            cubbyhole = c;
            this.number = number;
        }

        public void run() {
            for (int i = 0; i < 10; i++) {
                cubbyhole.put(i);
                System.out.println("Producer #" + this.number + " put: " + i);
                try {
                    sleep((int)(Math.random() * 100));
                } catch (InterruptedException e) {
                }
            }
        }
    }


    class ProducerConsumerTest {
        public static void main(String[] args) {
            CubbyHole c = new CubbyHole();
            Producer p1 = new Producer(c, 1);
            Consumer c1 = new Consumer(c, 1);

            p1.start();
            c1.start();
        }
    }

----------------------------------------------------------------------------

Revision History

ÀÛ¼ºÀÏÀÚ : 97.07.19
ÀÛ¼ºÀÚ : À̹ÎÈ£

¼öÁ¤ÀÏÀÚ :
¼öÁ¤ÀÚ :