org.wegra.thread
Class ThreadPool

java.lang.Object
  extended byjava.lang.ThreadGroup
      extended byorg.wegra.thread.ThreadPool

public final class ThreadPool
extends java.lang.ThreadGroup

½º·¹µå Ç®¿¡ ´ëÇÑ ¹ü¿ëÀûÀÎ ±¸Çö. ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

	ThrreadPool pool = new ThreadPool();
	pool.execute( new Runnable() {
		public void run() {
			// ÀÌ ºÎºÐÀº Ç® ¾ÈÀÇ ½º·¹µå¿¡ ÀÇÇØ¼­ »øÇàµÈ´Ù.
		}
	}
 
½º·¹µå Ç®ÀÇ Å©±â´Â ¿äû¿¡ µû¶ó¼­ ÀÚµ¿ÀûÀ¸·Î Áõ°¡ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ½º·¹µå Ç® ³»ÀÇ ½º·¹µå °³¼ö°¡ ÃæºÐÇÒ °æ¿ì¶ó¸é ³²´Â ½º·¹µå¸¦ »ç¿ëÇØ ¿äûÀ» ¼öÇàÇÏÁö¸¸, ±×·¸Áö ¾ÊÀº °æ¿ì¶ó¸é »õ·Ó°Ô ½º·¹µå¸¦ ¸¸µé¾î ¿äûÀ» ¼öÇàÇÑ´Ù. ÇÏÁö¸¸ Ç®ÀÌ ÃÖ´ë·Î Ä¿Áú ¼ö ÀÖ´Â Å©±â´Â ÁöÁ¤ÇØÁÙ ¼ö ÀÖ´Ù. °¢°¢ÀÇ ½º·¹µå Ç®Àº ½º·¹µå ±×·ìÀ» ÀÌ·é´Ù. ½Ç¿ëÀûÀÎ °üÁ¡¿¡¼­ º¼ ¶§ °¢°¢ÀÇ ½º·¹µå Ç®ÀÌ ½º·¹µå ±¸·ìÀ̶ó´Â »ç½ÇÀº º¸¾È ¸Å´ÏÀú¿¡¼­ ´Ù¸¥ ±×·ìÀÇ ½º·¹µå¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö¸¦ °üÀåÇÑ´Ù´Â °ÍÀ» ÀǹÌÇϸç, Ç® ³»ÀÇ ¸ðµç ½º·¹µåµéÀº ½±°Ô µ¥¸óÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ThreadGroup°ú´Â ´Ù¸£°Ô ½º·¹µå Ç®¿¡´Â join() ¸Þ¼Òµå°¡ ÀÖÀ¸¸ç ¿©±â¼­´Â wait() ¸¦ »ç¿ëÇØ¼­ ½º·¹µå Ç®ÀÇ Á¾·á¸¦ ±â´Ù¸± ¼ö ÀÖ°Ô ÇØÁØ´Ù.
 ThreadPool pool = new ThreadPool();
	//...
	try {
		synchronized(pool) {
			pool.wait();
		}
	} catch( InterruptedException ie) {
		// ¿¡·¯ ¹ß»ý
	}
 
À§ÀÇ Äڵ尡 ÆíÀÇ»ó join()À¸·Î½á ±¸ÇöµÈ °ÍÀÌ´Ù. ½º·¹µå¸¦ ÀÎÅÍ·´Æ® ÇÏ¸é ½º·¹µå°¡ Ç®¿¡¼­ ºüÁ®³ª¿À°Ô µÈ´Ù. ÀÌ·¸°Ô ÇÏ´Â °¡Àå ½¬¿î ¹æ¹ýÀº ´ÙÀ½°ú °¡ÀÌ ½ÇÇàµÉ ÀÛ¾÷ ÀÚü¿¡¼­ ÀÎÅÍ·´Æ®¸¦ °É¾î¹ö¸®´Â ¹æ¹ýÀÌ´Ù.
	pool.execute( new Runnable() {
			public void run() {
				interrupte();	// ½º·¹µå¸¦ Ç®·ÎºÎÅÍ Á¦°ÅÇÑ´Ù.
			}
		}
	);
 
ÇÏÁö¸¸ deflate(boolean) ¸Þ¼Òµå¸¦ »ç¿ëÇϸé Ç®ÀÇ Ãʱâ Å©±â¸¦ ÃʰúÇÏ´Â ¼öÀÇ ½º·¹µå¸¦ Ç®·ÎºÎÅÍ Á¦°ÅÇØÁÙ ¼ö ÀÖ´Ù. µû¶ó¼­, À§¿Í °°ÀÌ ÀÎÅÍ·´Æ®¸¦ °Å´Â ¹æ½Äº¸´Ù ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ ¹Ù¶÷Á÷ÇÏ´Ù.

Version:
1.0 (2001-08-31)
Author:
wegra(Bok-Youn Lee)

Nested Class Summary
static class ThreadPool.Test
          Å×½ºÆ® Ŭ·¡½º
 
Field Summary
static int MAX_CAPACITY
          ThreadPool ¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë Thread ¼ö
 
Constructor Summary
ThreadPool()
          ±âº»ÀûÀÎ ½º·¹µå Ç®À» »ý¼ºÇÑ´Ù.
ThreadPool(int initSize, int maxSize)
          initSize ¸¸Å­ÀÇ Ãʱ⠽º·¹µå¸¦ °¡Áö´Â ½º·¹µå Ç®À» »ý¼ºÇÑ´Ù.
 
Method Summary
 void close()
          Ç®¿¡¼­ ´ë±âÇϰí ÀÖ´Â ¸ðµç ½º·¹µå¸¦ Á¾·áÇÑ´Ù.
 void deflate(boolean doDeflate)
          ¸¸¾à ÀÎÀÚ°¡ true·Î ÁöÁ¤µÇ¸é ÃÖÃÊ·Î ÁÖ¾îÁø Ç®ÀÇ Å©±â±îÁö ¾ÐÃàµÈ´Ù.
 void execute(java.lang.Runnable action)
          ÇöÀç Ç®¿¡ ÀÖ´Â ½º·¹µå¸¦ »ç¿ëÇØ¼­ Runnable °´Ã¼ÀÇ run() ¸Þ¼Òµå¸¦ ½ÇÇàÇÑ´Ù.
 void execute(Subscriber action, java.lang.Object argument)
          ÇöÀç Ç®¿¡ ÀÖ´Â ½º·¹µå¸¦ »ç¿ëÇØ¼­ Command °´Ã¼ÀÇ execute() ¸Þ¼Òµå¸¦ ½ÇÇàÇÑ´Ù.
 void join()
          Ç®¿¡¼­ ´õ ÀÌ»ó ½ÇÇàµÇ´Â ½º·¹µå°¡ ¾øÀ» ¶§±îÁö ±â´Ù¸°´Ù.
 
Methods inherited from class java.lang.ThreadGroup
activeCount, activeGroupCount, allowThreadSuspension, checkAccess, destroy, enumerate, enumerate, enumerate, enumerate, getMaxPriority, getName, getParent, interrupt, isDaemon, isDestroyed, list, parentOf, resume, setDaemon, setMaxPriority, stop, suspend, toString, uncaughtException
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MAX_CAPACITY

public static final int MAX_CAPACITY
ThreadPool ¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë Thread ¼ö

See Also:
Constant Field Values
Constructor Detail

ThreadPool

public ThreadPool()
±âº»ÀûÀÎ ½º·¹µå Ç®À» »ý¼ºÇÑ´Ù.


ThreadPool

public ThreadPool(int initSize,
                  int maxSize)
initSize ¸¸Å­ÀÇ Ãʱ⠽º·¹µå¸¦ °¡Áö´Â ½º·¹µå Ç®À» »ý¼ºÇÑ´Ù. Ç®ÀÇ Å©±â´Â ¿äû¿¡ µû¶ó Ä¿Áú ¼ö ÀÖ´Ù.

Parameters:
initSize - Ãʱ⠽º·¹µå °³¼ö. ¸¸¾à ÃʱâÄ¡°¡ ȸ´ëÄ¡º¸´Ù Å©°Ô ÁÖ¾îÁ³À» °æ¿ì ÃÖ´ëÄ¡¿¡ ¸Â°Ô ÁÙ¾îµç´Ù.
maxSize - Ç®ÀÇ ÃÖ´ë Å©±â.
Method Detail

close

public void close()
Ç®¿¡¼­ ´ë±âÇϰí ÀÖ´Â ¸ðµç ½º·¹µå¸¦ Á¾·áÇÑ´Ù. Ç® ¾ÈÀÇ ¸ðµç ½ºµ¥¸£´Â Ç® ¹ÛÀ¸·Î ³ª¿À°Ô µÈ´Ù. ÇÏÁö¸¸ ÇöÀç ½ÇÇà ÁßÀÎ ½º·¹µå¶ó¸é ¹«¾ùÀ» Çϰí ÀÖ´ø °£¿¡ ÀÚ½ÅÀÌ Çϰí ÀÖ´ø ÀÏÀ» ÀüºÎ ´Ù ¼öÇàÇÑ ÈÄ¿¡ Á¾·áµÈ´Ù. execute(0 ¸¦ ÅëÇØ ½ÇÇàÀÌ ¿äûµÇ¾úÀ¸³ª ¾ÆÁ÷ ÀÌ¿¡ ÇÒ´çµÈ ½º·¹µå°¡ ¾ø´Â ÀÛ¾÷Àº Ãë¼ÒµÈ´Ù. Ç®ÀÌ Á¾·áµÈ ÀÌÈÄ¿¡´Â ¾î¶°ÇÑ ÀÛ¾÷µµ ÇÒ ¼ö ¾ø´Ù. ÀÌ¹Ì Á¾·áµÈ Ç®¿¡ ´Ù½Ã Á¾·á ¿äûÀ» º¸³¾ °æ¿ì ÀÌ ¿äûÀº ¹«½ÃµÈ´Ù.


deflate

public void deflate(boolean doDeflate)
¸¸¾à ÀÎÀÚ°¡ true·Î ÁöÁ¤µÇ¸é ÃÖÃÊ·Î ÁÖ¾îÁø Ç®ÀÇ Å©±â±îÁö ¾ÐÃàµÈ´Ù. Áï, Ç® ¾ÈÀÇ ½º·¹µåÀÇ °¹¼ö´Â Ãʱ⠰¹¼öº¸´Ù Àû¾îÁöÁö ¾ÊÁö¸¸ ¸¸¾à ½º·¹µåÀÇ °¹¼ö°¡ Ãʱ⠰¹¼öº¸´Ù ´Ã¾î³ª´Â °æ¿ì¿¡´Â Ç®ÀÇ ½º·¹µå °¹¼ö°¡ ÃʱâÄ¡·Î ´Ù½Ã ÁÙ¾îµé°Ô µÈ´Ù. ÀÌ ¸Þ¼Òµå´Â Ç®ÀÇ ÄÚµç ½º·¹µåµéÀÌ È°¼ºÈ­ µÇ±â Àü¿¡ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¸¸¾à ÀÎÀÚ°¡ false·Î ÁöÁ¤µÇ¸é(½º·¹µå Ç®¿¡¼­ »ç¿ëÇÏ´Â ±âº»°ªÀº false) È®ÀåµÈ ½º·¹µå Ç®ÀÇ Å©±â´Â ÁÙ¾îµéÁö ¾Ê´Â´Ù.


execute

public void execute(java.lang.Runnable action)
             throws ClosedQueueException
ÇöÀç Ç®¿¡ ÀÖ´Â ½º·¹µå¸¦ »ç¿ëÇØ¼­ Runnable °´Ã¼ÀÇ run() ¸Þ¼Òµå¸¦ ½ÇÇàÇÑ´Ù. Ç®¿¡ »ç¿ë °¡´ÉÇÑ ½º·¹µå°¡ ¾ø´Ù¸é »õ·Ó°Ô ½º·¹µå¸¦ ¸¸µé¾î Ç®¿¡ Ãß°¡ÇÏÁö¸¸ ÀÌ´Â Ç®ÀÇ ÃÖ´ë ½º·¹µå °¹¼ö¸¦ ³ÑÁö ¾ÊÀ» ¶§ ±îÁö¸¸ °¡´ÉÇÏ´Ù.

Throws:
ClosedQueueException - close() ¿äûÀ» º¸³½ ÈÄ¿¡ Ç®¿¡ ¹º°¡ ÀÛ¾÷À» ¿äûÇßÀ» ¶§ ¹ß»ýÇÑ´Ù.

execute

public final void execute(Subscriber action,
                          java.lang.Object argument)
                   throws ClosedQueueException
ÇöÀç Ç®¿¡ ÀÖ´Â ½º·¹µå¸¦ »ç¿ëÇØ¼­ Command °´Ã¼ÀÇ execute() ¸Þ¼Òµå¸¦ ½ÇÇàÇÑ´Ù. Ç®¿¡ »ç¿ë °¡´ÉÇÑ ½º·¹µå°¡ ¾ø´Ù¸é »õ·Ó°Ô ½º·¹µå¸¦ ¸¸µé¾î Ç®¿¡ Ãß°¡ÇÏÁö¸¸ ÀÌ´Â Ç®ÀÇ ÃÖ´ë ½º·¹µå °¹¼ö¸¦ ³ÑÁö ¾ÊÀ» ¶§±îÁö¸¸ °¡´ÉÇÏ´Ù. argumentÀÇ °ªÀº ½ÇÁ¦ ÀÛ¾÷ÀÌ ½ÇÇàµÉ ¶§ÀÇ °ªÀÌ »ç¿ëµÈ´Ù. Áï, execute()¸¦ È£ÃâÇÒ ¶§ ³Ñ°ÜÁØ °ªÀÌ ½ÇÁ¦·Î ½ÇÇàµÇ±â Àü¿¡ ¹Ù²ï´Ù¸é ¹Ù²ï °ªÀÌ ½ÇÇàµÉ ¶§ »ç¿ëµÈ´Ù.

Throws:
ClosedQueueException - ÀÌ¹Ì Á¾·áµÈ Ç®¿¡ ´ëÇØ ÀÛ¾÷À» ¿äûÇßÀ» °æ¿ì.

join

public void join()
Ç®¿¡¼­ ´õ ÀÌ»ó ½ÇÇàµÇ´Â ½º·¹µå°¡ ¾øÀ» ¶§±îÁö ±â´Ù¸°´Ù. ÀÌ ¸Þ¼Òµå´Â ´ÙÀ½°ú °°Àº ¿ªÇÒÀ» ÇÑ´Ù.
	ThreadPool pool = new ThreadPool();
	//..
	try {
		synchronized( pool ) {
			pool.wait();
		}
	} catch ( InterruptedException ie) {
 		// ¹«½Ã
	}