Thread Pool

back

Contents

  1. Block Queue
  2. Thread Pool


ÀϹÝÀûÀÎ Thread PoolÀº ÀÛ¾÷½º·¹µå¸¦ °è¼ÓÇØ¼­ Ç®¿¡ ³ÖÀ¸¸é °¹¼ö°¡ ÇÑÁ¤µÇ¾î ÀÖ´Â ÀÏÇÒ½º·¹µå°¡ Ç®À» °Ë»çÇÏ¿© ÀÛ¾÷½º·¹µå°¡ Á¸ÀçÇÏ¸é ²¨³»¾î¼­ ½ÇÇàÇÑ ÈÄ ´ÙÀ½ ÀÛ¾÷½º·¹µå°¡ Ç®¿¡ »ý±æ ¶§±îÁö ±â´Ù¸°´Ù. ´Ù½Ã ÀÛ¾÷½º·¹µå¸¦ Ç®¿¡ ³ÖÀ¸¸é ±â´Ù¸®°í ÀÖ´ø ÀÏÇÒ½º·¹µå°¡ ±ú¾î³ª Ç®¿¡¼­ ÀÛ¾÷½º·¹µå¸¦ ²¨³»¾î ½ÇÇàÇÔÀ» ¹Ýº¹ÇÑ´Ù.

¾Æ·¡¼­ ¼³¸íÇÒ Thread PoolÀº ÀÛ¾÷¿¡ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ Ç®¿¡ °è¼ÓÇØ¼­ ³ÖÀ¸¸é °´¼ö°¡ ÇÑÁ¤µÇ¾î ÀÖ´Â ÀÏÇÒ½º·¹µå°¡ Ç®À» °Ë»çÇÏ¿© µ¥ÀÌÅͰ¡ Á¸ÀçÇÏ¸é ²¨³»¼­ ½ÇÇàÇÑ ÈÄ ´ÙÀ½ µ¥ÀÌÅͰ¡ ¹ß»ýÇÒ ¶§±îÁö ±â´Ù¸°´Ù. Ç®Àº µ¥ÀÌÅͰ¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§ ÀÏÇÒ½º·¹µå¸¦ ±â´Ù¸®°Ô ÇÏ¸ç µ¥ÀÌÅͰ¡ Ç®¿¡ »ý±æ ¶§ ±â´Ù¸®°í ÀÖ´ø ½º·¹µå¸¦ ±ú¿î´Ù.

Â÷ÀÌÁ¡À̶ó°í ÇÑ´Ù¸é Ç®¿¡ µé¾î°¡´Â ÇüŰ¡ ´Ù¸£´Ù°í ÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀÎ ½º·¹µå Ç®ÀÇ °æ¿ì¿¡´Â ¾î¶² ÀÛ¾÷ ½º·¹µå°¡ Ç®¿¡ µé¾î¿À´õ¶óµµ º¯°æµÇ´Â ºÎºÐÀÌ ¾øÁö¸¸ ¾Æ·¡ÀÇ ½º·¹µå Ç®Àº Ç®¿¡ µ¥ÀÌÅͰ¡ Á÷Á¢ Àü´ÞµÇ±â ¶§¹®¿¡ µ¥ÀÌÅÍÀÇ Á¾·ù¸¸Å­ÀÇ ÀÏÇÒ ½º·¹µå¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù.

 

1. Block Queue

Block Queue´Â ù ¹øÂ° thread°¡ ºñ¾î Àִ ť·ÎºÎÅÍ dequeueÇÏ·Á°í ÇÏ¸é µÎ ¹øÂ° thread°¡ Å¥¿¡ µ¥ÀÌÅ͸¦ enqueueÇÒ ¶§±îÁö ºí·ÏµÈ´Ù. Å¥´Â LinkedList·Î ±¸ÇöµÈ´Ù.

 

import java.uti.*;

public class BlockQueue
{
     private LinkedList queue = new LinkedList();

     public BlockQueue()
     {
     }

     public synchronized final void enqueue( Object data ) throws IllegalMonitorStateException
     {
          queue.addList( data );
          notify();
     }

     public synchronized final Object dequeue() throws InterruptedException
     {
           while( queue.size() <= 0 )
           {
                 wait();
           }
           return queue.removeFirst();
      }

     public synchronized final boolean isEmpty()
     {
          return queue.size() > 0;
     }

     public synchronized void close() throws IllegalMonitorStateException
     {
          notifyAll();
     }
}

 

 

2. Thread Pool

Thread PoolÀº ¸â¹ö º¯¼ö·Î½á Block Queue¸¦ °¡Áö¸ç µ¥ÀÌÅ͸¦ ó¸®Çϱâ À§ÇÑ Thread¸¦ inner class·Î ¼±¾ðÇϰí ÀÖ´Ù. ƯÈ÷ Thread PoolÀº ¿ÜºÎ¿¡¼­ Å¥¿¡°Ô µ¥ÀÌÅ͸¦ ³ÖÀ» ¼ö ÀÖ´Â Method¸¦ Á¦°øÇϰí ÀÖ´Ù.

 

public class ThreadPool extends ThreadGroup
{
     private BlockQueue qu = new BlockQueue();
     private boolean closed = false;
     private int threadSize = 0 ;

 

     private class MyThread extends Thread
     {
          public MyThread()
          {
          }

          public void run()
          {
               try
               {
                     while( !closed )
                     {
                          Object date = qu.dequeue();

                          /*
                              Ç®¿¡¼­ ²¨³½ µ¥ÀÌÅ͸¦ ó¸®ÇÒ ºÎºÐ
                          */

                      }
                }
                catch( InterruptedException e )
                {
                }
          }
     }

 

     public ThreadPool() {}

     public void makePool( int size )
     {
          for( int i=0; i<size; i++ )
          {
                new MyThread().start();
          }
     }

     public void addData( Object data )
     {
          try
          {
               qu.enqueue( data );
           }
           catch( IllegalMonitorStateException e )
           {
           }
     }

     public void close()
     {
          closed = true;
          qu.close();
     }
}

 

back


GYRO is Chun Gyu Yong's nickname.
SINCE 1999.  copyright by GYRO.
GYRO@LYCOS.CO.KR