

Contents
- Block
Queue
- 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();
} } |

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