JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent
Ŭ·¡½º ThreadPoolExecutor

java.lang.Object 
  »óÀ§¸¦ È®Àå java.util.concurrent.AbstractExecutorService 
      »óÀ§¸¦ È®Àå java.util.concurrent.ThreadPoolExecutor
¸ðµç ±¸ÇöµÈ ÀÎÅÍÆäÀ̽º:
Executor, ExecutorService
¾Ë·ÁÁø Á÷°è ¼­ºê Ŭ·¡½º:
ScheduledThreadPoolExecutor

public class ThreadPoolExecutor
extends AbstractExecutorService

¸¹Àº °æ¿ì, Ç® µÈ º¹¼öÀÇ threadÀÇ ¾î´ÀÂÊÀ̵çÀ» »ç¿ëÇØ, ¼Û½ÅµÈ °¢ ŽºÅ©¸¦ ½ÇÇàÇÏ´Â ExecutorService . ÀϹÝÀûÀ¸·ÎExecutors ÆÑÅ丮 ¸Þ¼­µå¸¦ »ç¿ëÇØ ±¸¼ºµË´Ï´Ù.

thread Ç®Àº ŽºÅ©¸¶´ÙÀÇ È£ÃâÀÇ ¿À¹öÇìµå¸¦ °¨¼Ò½ÃÅ°´Â °ÍÀ¸·Î ´ë·®ÀÇ ºñµ¿±â ŽºÅ©¸¦ ½ÇÇàÇÒ ¶§ÀÇ ÆÛÆ÷¸Õ½º¸¦ °³¼±ÇØ, ŽºÅ©ÀÇ Ä÷º¼ÇÀ» ½ÇÇàÇÒ ¶§¿¡ ¼ÒºñµÇ´Â threadµîÀÇ ÀÚ¿øÀ» Á¦ÇÑ ¹× °ü¸®ÇÏ´Â ¼ö´ÜÀ» Á¦°øÇÏ´Â °ÍÀ¸·Î ´Ù¸¥ 2°³ÀÇ ¹®Á¦¿¡ ´ëÀÀÇÕ´Ï´Ù. °¢ ThreadPoolExecutor µµ, ¿Ï·á ŽºÅ©ÀÇ ¼öµîÀÇ ¸î°³ÀÇ ±âº»ÀûÀÎ Åë°è¸¦ °ü¸®ÇÕ´Ï´Ù.

±¤¹üÀ§ÇÑ ÄÁÅؽºÆ® À¸·Î À¯¿ëÇϱ⠶§¹®¿¡, ÀÌ Å¬·¡½º´Â Á¶Á¤ °¡´ÉÇÑ ´Ù¼öÀÇ ÆĶó¹ÌÅÍ ¹× È®Àå ±â´É ÈÅÀ» Á¦°øÇÕ´Ï´Ù. ´Ù¸¸, ÇÁ·Î±×·¡¸Ó´Â º¸´Ù Æí¸®¼ºÀÇ ³ôÀº Executors ÆÑÅ丮 ¸Þ¼­µåÀÎ Executors.newCachedThreadPool() (¾È ¹Ù¿îµå Çü½ÄÀÇ thread Ç®, ÀÚµ¿ thread Àç»ýÀ» Æ÷ÇÔÇÑ´Ù), Executors.newFixedThreadPool(int) (°íÁ¤ »çÀÌÁîÀÇ thread Ç®) ¹× Executors.newSingleThreadExecutor() (´Üµ¶ÀÇ ¹é±×¶ó¿îµå thread)¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Ãßõ µÇ°í ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¸Þ¼­µå´Â ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ´ëºÎºÐÀÇ ½Ã³ª¸®¿À¿¡ ¸ÂÃß¾î ¹Ì¸® ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì´Â ´ÙÀ½¿¡ ³ªÅ¸³»´Â °¡À̵忡 µû¶ó ÀÌ Å¬·¡½º¸¦ ¼öµ¿À¸·Î ±¸¼º ¹× Æ©´×ÀÇÇØ ÁÖ¼¼¿ä.

ÄÚ¾î ¹× ÃÖ´ë Ç® »çÀÌÁî
ThreadPoolExecutor´Â corePoolSize (getCorePoolSize()¸¦ ÂüÁ¶) ¹× maximumPoolSize (getMaximumPoolSize()¸¦ ÂüÁ¶)°¡ ºÎ°úÇÏ´Â Á¦ÇÑ¿¡ µû¶ó, Ç® »çÀÌÁî (getPoolSize()¸¦ ÂüÁ¶)¸¦ ÀÚµ¿Á¶Á¤ ÇÕ´Ï´Ù. »õ·Î¿î ŽºÅ©°¡ execute(java.lang.Runnable) ¸Þ¼­µå³»¿¡¼­ ¼Û½ÅµÇ¾î corePoolSize threadº¸´Ù ½ÇÇàÁßÀÇ ¼ö°¡ ÀûÀº °æ¿ì, ´Ù¸¥ ¿öÄ«½º·¹µå°¡ÀÚ½Ä µ¹ »óÅÂÀÇ °æ¿ì¿¡¼­µµ, ¿ä±¸¸¦ ó¸®Çϱâ À§Çؼ­ »õ·Î¿î thread°¡ ÀÛ¼ºµË´Ï´Ù. ½ÇÇàÁßÀÇ ¼ö°¡ corePoolSize threadº¸´Ù ¸¹¾Æ, maximumPoolSize threadº¸´Ù ÀûÀº °æ¿ì, Å¥°¡ °¡µæ µÇ¾î ÀÖ´Â °æ¿ì¿¡°Ô¸¸ »õ·Î¿î thread°¡ ÀÛ¼ºµË´Ï´Ù. corePoolSize ¹× maximumPoolSize¸¦ °°°Ô ¼³Á¤ÇÏ´Â °ÍÀ¸·Î °íÁ¤ »çÀÌÁîÀÇ thread Ç®À» ÀÛ¼ºÇÕ´Ï´Ù. maximumPoolSizeÀ» Integer.MAX_VALUE µîÀÇ ¿øÄ¢ÀûÀ¸·Î ¹«Á¦ÇÑÇÑ °ªÀ¸·Î ¼³Á¤ÇÏ´Â °ÍÀ¸·Î Ç®ÀÌ ÀÓÀÇÀÇ ¼öÀÇ µ¿½Ã ŽºÅ©¸¦ ¹Þ¾ÆµéÀÌ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µË´Ï´Ù. º¸Åë, ÄÚ¾î ¹× ÃÖ´ë Ç® »çÀÌÁî´Â ±¸Ãà½Ã¿¡°Ô¸¸ ¼³Á¤µË´Ï´Ù¸¸, setCorePoolSize(int) ¹× setMaximumPoolSize(int)¸¦ »ç¿ëÇØ µ¿ÀûÀ¸·Î º¯°æÇÏ´Â Àϵµ °¡´ÉÇÕ´Ï´Ù.
¿ä±¸¿¡ ÀÀÇÑ ±¸Ãà
µðÆúÆ®¿¡¼­´Â ÄÚ¾î thread°¡ ÃÖÃÊ·Î ÀÛ¼ºµÇ¾î ÇÊ¿äÇÑ ¶§¸¸ »õ·Î¿î ŽºÅ©¿¡ ÀÇÇØ ½ÃÀ۵Ǵ °æ¿ì¿¡¼­µµ, prestartCoreThread() ³ª prestartAllCoreThreads() ¸Þ¼­µå¸¦ »ç¿ëÇØ µ¿ÀûÀ¸·Î ¿À¹ö¶óÀ̵å(override) µÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.
»õ·Î¿î threadÀÇ ÀÛ¼º
»õ·Î¿î thread´Â ThreadFactory¸¦ »ç¿ëÇØ ÀÛ¼ºµË´Ï´Ù. ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì´Â Executors.defaultThreadFactory()¸¦ »ç¿ëÇØ, ÀÛ¼ºÇÏ´Â thread ¸ðµç °ÍÀÌ °°Àº ThreadGroup, NORM_PRIORITY ¿ì¼±µµ ¹× ºñdemon »óŸ¦ º¸°ü À¯ÁöÇϵµ·Ï ÇÕ´Ï´Ù. ´Ù¸¥ ThreadFactory¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ¸·Î threadÀÇ À̸§, thread ±×·ì, ¿ì¼± ¼øÀ§, demon »óŵîÀ» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. newThread·Î ºÎÅÍ nullÀÌ µ¹·ÁÁÖ°íÁ³À» ¶§¿¡ ¿ä±¸µÈ ThreadFactory·Î threadÀÇ ÀÛ¼º¿¡ ½ÇÆÐÇßÀ» °æ¿ì, executor´Â ¼ÓÇàÇÕ´Ï´Ù¸¸, ŽºÅ©¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
ŵ¾ó¶óÀÌºê ½Ã°£
Ç®ÀÌ ÇöÀç corePoolSize¸¦ ³Ñ´Â thread¸¦ º¸°ü À¯ÁöÇÏ°í ÀÖ´Â °æ¿ì,ÀÚ½Ä µ¹ »óÅÂÀÇ ½Ã°£ÀÌ keepAliveTime (getKeepAliveTime(java.util.concurrent.TimeUnit)¸¦ ÂüÁ¶)¸¦ ÃÊ°úÇϸé, ÃÊ°úÇÑ thread´Â Á¾·áÇÕ´Ï´Ù. ÀÌ°Í¿¡ ÀÇÇØ Ç®ÀÌ È°¼ºÈ­ »ç¿ëµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡ ÀÚ¿øÀÇ ¼Òºñ¸¦ ¾ïÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù . Ç®ÀÌ ³ªÁß¿¡º¸´Ù È°¼ºÈ­ µÇ¸é, »õ·Î¿î thread°¡ ÀÛ¼ºµË´Ï´Ù. ÀÌ ÆĶó¹ÌÅÍ´Â setKeepAliveTime(long, java.util.concurrent.TimeUnit) ¸Þ¼­µå¸¦ »ç¿ëÇØ µ¿ÀûÀ¸·Î º¯°æÇÏ´Â Àϵµ °¡´ÉÇÕ´Ï´Ù. Long.MAX_VALUE TimeUnit.NANOSECONDS Ä¡¸¦ »ç¿ëÇϸé,ÀÚ½Ä µ¹ »óÅÂÀÇ thread°¡ ¼Ë´Ù¿îÀü¿¡ Á¾·áÇÏÁö ¾Ê°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Å¥À×
ÀÓÀÇ BlockingQueue¸¦ »ç¿ëÇØ, ¼Û½Å ³¡³­ ŽºÅ©¸¦ Àü¼Û ¹× º¸°ü À¯ÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Å¥¸¦ »ç¿ëÇϸé, Ç®ÀÇ »çÀÌÁî º¯°æÀÌ ´ëÈ­ÀûÀ¸·Î 󸮵˴ϴÙ. Å¥À׿¡´Â ´ÙÀ½ÀÇ 3°³ÀÇ ½ºÆ®·¡ÅÍÁö°¡ ÀÖ½À´Ï´Ù.
  1. Á÷Á¢ ÇÚµå ¿ÀÇÁ. ÀÛ¾÷ Å¥¿ëÀÌ ¶Ù¾î³­ µðÆúÆ® ¼±ÅÃÀÎ SynchronousQueue ´Â thread¸¦ µû·Î º¸°ü À¯ÁöÇÏ´Â ÀÏ ¾øÀÌ thread¿¡ °Ç³×ÁØ´Ù. ¿©±â¼­, °ð¹Ù·Î ½ÇÇà °¡´ÉÇÑ thread°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì, ŽºÅ©¸¦ Å¥¿¡ ³ÖÀ¸·Á°í ÇÏ´Â ½Ãµµ´Â ½ÇÆÐÇϱâ À§ÇØ, »õ·Î¿î thread°¡ ÀÛ¼ºµÈ´Ù. ÀÌ Á¤Ã¥´Â ³»ºÎ Á¸¼ºÀ» º¸°ü À¯ÁöÇÒ °¡´É¼ºÀÌ ÀÖ´Â ¿ä±¸ ¼¼Æ®¸¦ ó¸®ÇÒ ¶§, ·Ï ¾÷À» ȸÇÇÇÑ´Ù. º¸Åë, Á÷Á¢ ÇÚµå ¿ÀÇÁ¿¡¼­´Â »õ·Ó°Ô ¼Û½ÅµÇ´Â ŽºÅ©°¡ °ÅºÎµÇ´Â °ÍÀ» ȸÇÇÇϱâ À§Çؼ­ ¾È ¹Ù¿îµå Çü½ÄÀÇ maximumPoolSizes°¡ ÇÊ¿äÇÏ°Ô µÈ´Ù. ÇÑÆí, ÀÌ °æ¿ì ÀüüÀûÀ¸·Î ó¸® ´É·ÂÀ» ³Ñ´Â ¼Óµµ·Î Ä¿¸àµå°¡ Â÷·ÊÂ÷·Ê·Î µµÂøÇϸé, ¾È ¹Ù¿îµå Çü½ÄÀÇ thread°¡ Ä¿Áú °¡´É¼ºÀÌ ÀÖ´Ù
  2. ¾È ¹Ù¿îµå Çü½ÄÀÇ Å¥. ¾È ¹Ù¿îµå Çü½ÄÀÇ Å¥ (Á¤ÀÇ ³¡³­ ¿ë·®À» °¡ÁöÁö ¾Ê´Â LinkedBlockingQueue µî)¸¦ »ç¿ëÇϸé, ¸ðµç corePoolSize thread°¡ Busy »óÅ¿¡ ÀÖ´Â °æ¿ì¿¡ »õ·Î¿î ŽºÅ©°¡ Å¥¿¡ ³Ö¾îÁø´Ù. ÀÌ ¶§¹®¿¡ corePoolSize¸¦ ³Ñ´Â thread´Â ÀÛ¼ºµÇÁö ¾Ê´Â´Ù (µû¶ó¼­, maximumPoolSize °ªÀº ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù). ÀÌ°ÍÀÌ ÀûÀýÇÑ °ÍÀº Web ÆäÀÌÁö ¼­¹ö³» µî, °¢ ŽºÅ©°¡ ´Ù¸¥ ŽºÅ©·ÎºÎÅÍ ¿ÏÀüÇÏ°Ô µ¶¸³ÇÏ°í ÀÖ±â À§Çؼ­ ŽºÅ©°¡ ´Ù¸¥ ŽºÅ©ÀÇ ½ÇÇà¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °ÍÀÌ ¾ø´Â °æ¿ìÀÌ´Ù. ÀÌ Å¥ ½ºÅ¸ÀÏÀº ÀϽÃÀûÀ¸·Î ±ÞÁõÇÑ ¿ä±¸¸¦ ó¸®ÇÏ´Â °æ¿ì µî¿¡ À¯¿ëÇÏÁö¸¸, ÀüüÀûÀ¸·Î ó¸® ´É·ÂÀ» ³Ñ´Â ¼Óµµ·Î Ä¿¸àµå°¡ Â÷·ÊÂ÷·Ê·Î µµÂøÇϸé, ¾È ¹Ù¿îµå Çü½ÄÀÇ ÀÛ¾÷ Å¥°¡ Ä¿Áú °¡´É¼ºÀÌ ÀÖ´Ù
  3. ¹Ù¿îµå Çü½ÄÀÇ Å¥. ¹Ù¿îµå Çü½ÄÀÇ Å¥ (ArrayBlockingQueue µî)´Â ÇÑÁ¤µÈ maximumPoolSizes¿Í ÇÔ²² »ç¿ëÇϸé ÀÚ¿øÀÇ °í°¥À» ¸·´Â °æ¿ì¿¡ µµ¿òÀÌ µÇÁö¸¸, Æ©´×À̳ª Á¦¾î°¡ °ï¶õÇÏ°Ô µÉ °¡´É¼ºÀÌ ÀÖ´Ù. Å¥ »çÀÌÁî¿Í ÃÖ´ë Ç® »çÀÌÁî´Â Æ®·¹ÀÌµå ¿ÀÇÁÀÇ °ü°è¿¡ ÀÖ´Ù. ´ë±Ô¸ð Å¥¿Í ¼Ò±Ô¸ðÀÇ Ç®À» »ç¿ëÇϸé, CPU »ç¿ë, OS ÀÚ¿ø ¹× ÄÁÅؽºÆ® º¯È¯ÀÇ ¿À¹öÇìµå¸¦ °¡´ÉÇÑ ÇÑ ÁÙÀÏ ¼ö°¡ ÀÖÁö¸¸, ±× ¶§¹®¿¡(À§ÇØ) throughput°¡ ÀúÇÏÇÒ °¡´É¼ºÀÌ ÀÖ´Ù. ŽºÅ©°¡ ºó¹øÇÏ°Ô ºí·Ï ÇÏ´Â (¿¹¸¦ µé¾î ÀÔÃâ·ÂÀÌ Á¦ÇѵȴÙ) °æ¿ì, ´Ù¸¥ ¹æ¹ýÀ¸·Î Çã°¡ÇÏ´Â °Íº¸´Ùµµ ¸¹Àº thread¿¡ ´ëÇؼ­ ½Ã½ºÅÛÀÌ ½Ã°£À» ½ºÄÉÁÙ ÇÒ ¼ö ÀÖ´Ù. º¸Åë, ¼Ò±Ô¸ðÀÇ Å¥¸¦ »ç¿ëÇϸé, ´ë·®ÀÇ Ç® »çÀÌÁî°¡ ÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ°Í¿¡ ÀÇÇØ CPU Busy »óÅ°¡ ¸¹¾ÆÁöÁö¸¸, ¼ö¶ô ºÒ°¡ÀÇ ½ºÄÉÁÙ¸µ ¿À¹öÇìµå¿¡ Á¶¿ìÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ ¿ª½Ã throughput°¡ ÀúÇÏÇÑ´Ù
°ÅºÎµÈ ŽºÅ©
Executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖ´Â °æ¿ì ¹× Executor°¡ ÃÖ´ë thread¿Í ÀÛ¾÷ Å¥ ¿ë·®ÀÇ ¾çÂÊ ¸ðµÎ¸¦ Á¦ÇÑÇØ, ±×°ÍÀÌ Æ÷È­ »óÅ¿¡ ÀÖ´Â °æ¿ì, execute(java.lang.Runnable) ¸Þ¼­µå³»¿¡ ¼Û½ÅµÈ »õ·Î¿î ŽºÅ©´Â ¡¸°ÅºÎ¡¹µË´Ï´Ù. ¾î´À ÂÊÀÇ °æ¿ìµµ, execute ¸Þ¼­µå´Â RejectedExecutionHandler RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) ¸Þ¼­µå¸¦ È£ÃâÇÕ´Ï´Ù. ´ÙÀ½ÀÇ 4°³ÀÇ Á¤ÀÇ°¡ ³¡³­ Çڵ鷯 Á¤Ã¥°¡ Á¦°øµË´Ï´Ù.
  1. µðÆúÆ® ThreadPoolExecutor.AbortPolicy ¿¡¼­´Â °ÅºÎµÇ¸é, Çڵ鷯´Â ½ÇÇà½Ã RejectedExecutionException¸¦ Throw ÇÑ´Ù
  2. ThreadPoolExecutor.CallerRunsPolicy ¿¡¼­´Â execute ÀÚü¸¦ È£ÃâÇÏ´Â thread°¡ ŽºÅ©¸¦ ½ÇÇàÇÑ´Ù. ÀÌ°Í¿¡ ÀÇÇØ ´Ü¼øÇÑ Çǵå¹é Á¦¾î ¸ÞÄ«´ÏÁòÀÌ Á¦°øµÇ¾î °á°úÀûÀ¸·Î »õ·Î¿î ŽºÅ©ÀÇ ¼Û½Å ·¹ÀÌÆ®°¡ ÀúÇÏÇÑ´Ù
  3. ThreadPoolExecutor.DiscardPolicy ¿¡¼­´Â ½ÇÇà ºÒ°¡´ÉÇÑ Å½ºÅ©´Â ´ÜÁö »èÁ¦µÈ´Ù
  4. ThreadPoolExecutor.DiscardOldestPolicy ¿¡¼­´Â executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì, ÀÛ¾÷ Å¥ÀÇ ¼±µÎ¿¡ Àִ ŽºÅ©°¡ »èÁ¦µÇ¾î ½ÇÇàÀÌ ÀçÂ÷ ½ÃµµµÈ´Ù (ÀçÂ÷ ½ÇÆÐÇÒ °¡´É¼ºµµ ÀÖ¾î, ±× °æ¿ì´Â ÀÌ°ÍÀÌ ¹Ýº¹ÇØÁø´Ù)
´Ù¸¥ Á¾·ù RejectedExecutionHandler Ŭ·¡½º¸¦ Á¤ÀÇ ¹× »ç¿ëÇÏ´Â Àϵµ °¡´ÉÇÕ´Ï´Ù. ÀÌ °æ¿ì ƯÈ÷ Á¤Ã¥°¡ ƯÁ¤ÀÇ ¿ë·® ¶Ç´Â Å¥À× Á¤Ã¥¿¡ ¼­¸¸ µ¿ÀÛÇϵµ·Ï ¼³°èµÇ°í ÀÖ´Â °æ¿ì´Â ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù.
ÈÅ ¸Þ¼­µå
ÀÌ Å¬·¡½º´Â protected¸¦ ¿À¹ö¶óÀ̵å(override) °¡´ÉÇÑ beforeExecute(java.lang.Thread, java.lang.Runnable) ¹× afterExecute(java.lang.Runnable, java.lang.Throwable) ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ°ÍÀº °¢ ŽºÅ©ÀÇ ½ÇÇà ÀüÈÄ¿¡ È£ÃâÇÕ´Ï´Ù. À̰͵éÀº ThreadLocals ÀçÃʱâÈ­, Åë°èÀÇ ¼öÁý, ·Î±× ¿£Æ®¸®ÀÇ Ãß°¡µîÀÇ, ½ÇÇà ȯ°æÀÇ Á¶ÀÛ¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, terminated() ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵å(override) ÇØ, Executor°¡ ¿ÏÀüÇÏ°Ô Á¾·áÇÑ ÈÄ¿¡ ½ÇÇàÇÒ ÇÊ¿ä°¡ Àִ Ư¼öÇÑ Ã³¸®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÈÅ ¸Þ¼­µå ¶Ç´Â ÄÝ¹é ¸Þ¼­µå°¡ ¿¹¿Ü¸¦ Throw Çϸé, ³»ºÎÀÇ ¿öÄ«½º·¹µå°¡ ½ÇÆÐÇØ Áï½Ã Á¾·áÇÕ´Ï´Ù.

Å¥ÀÇ º¸¼ö
getQueue() ¸Þ¼­µå¸¦ »ç¿ëÇϸé, °¨½Ã ¹× µð¹ö±× ¸ñÀûÀ¸·Î ÀÛ¾÷ Å¥¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ¸ñÀûÀ¸·Î ÀÌ ¸Þ¼­µå¸¦ »ç¿ëÇÏ´Â °ÍÀº °¡´ÉÇÑ ÇÑ ÇÇÇØ ÁÖ¼¼¿ä. Å¥¿¡ ³Ö¾îÁø ´ë·®ÀÇ Å½ºÅ©°¡ »èÁ¦µÇ¾úÀ» °æ¿ì, Á¦°øµÇ´Â 2°³ÀÇ ¸Þ¼­µå remove(java.lang.Runnable) ¹× purge()¸¦ ±â¾ï ¿µ¿ªÀÇ Àç¿ø½ÃÁö¿ø¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

È®Àå ±â´ÉÀÇ ¿¹. ÀÌ Å¬·¡½ºÀÇ È®Àå ±â´ÉÀÇ ´ëºÎºÐÀº 1°³ ÀÌ»óÀÇ protected ÈÅ ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵å(override) ÇÕ´Ï´Ù. ´ÙÀ½ÀÇ ¿¹´Â ´Ü¼øÇÑ ÀϽÃÁ¤Áö/Àç°³ ±â´ÉÀ» Ãß°¡ÇÏ´Â ¼­ºê Ŭ·¡½ºÀÔ´Ï´Ù.


 class PausableThreadPoolExecutor extends ThreadPoolExecutor {
   private boolean isPaused;
   private ReentrantLock pauseLock = new ReentrantLock();
   private Condition unpaused = pauseLock.newCondition();

   public PausableThreadPoolExecutor(...) { super(...); }
 
   protected void beforeExecute(Thread t, Runnable r) {
     super.beforeExecute(t, r);
     pauseLock.lock();
     try {
       while (isPaused) unpaused.await();
     } catch(InterruptedException ie) {
       t.interrupt();
     } finally {
       pauseLock.unlock();
     }
   }
 
   public void pause() {
     pauseLock.lock();
     try {
       isPaused = true;
     } finally {
       pauseLock.unlock();
     }
   }
 
   public void resume() {
     pauseLock.lock();
     try {
       isPaused = false;
       unpaused.signalAll();
     } finally {
       pauseLock.unlock();
     }
   }
 }
 

µµÀÔµÈ ¹öÀü :
1.5

Áßø(Nested) Ŭ·¡½º °³¿ä
static class ThreadPoolExecutor.AbortPolicy
          RejectedExecutionExceptionÀ» Throw ÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
static class ThreadPoolExecutor.CallerRunsPolicy
          executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ execute ¸Þ¼­µåÀÇ thread È£Ãâ·Î °ÅºÎµÈ ŽºÅ©¸¦ Á÷Á¢ ½ÇÇàÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
static class ThreadPoolExecutor.DiscardOldestPolicy
          executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ °¡Àå ³°Àº ¹Ìó¸®ÀÇ ¿ä±¸¸¦ ÆıâÇØ execute¸¦ Àç½ÃÇàÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
static class ThreadPoolExecutor.DiscardPolicy
          °ÅºÎµÈ ŽºÅ©¸¦ ¿¹°í ¾øÀÌ ÆıâÇÑ´Ù, °ÅºÎµÈ ŽºÅ©ÀÇ Çڵ鷯.
 
»ý¼ºÀÚ °³¿ä
ThreadPoolExecutor (int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit  unit, BlockingQueue <Runnable > workQueue)
          ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅÍ ¹× µðÆúÆ®ÀÇ thread ÆÑÅ丮 ¹× Çڵ鷯¸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
ThreadPoolExecutor (int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit  unit, BlockingQueue <Runnable > workQueue, RejectedExecutionHandler  handler)
          ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅ͸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
ThreadPoolExecutor (int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit  unit, BlockingQueue <Runnable > workQueue, ThreadFactory  threadFactory)
          ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅ͸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
ThreadPoolExecutor (int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit  unit, BlockingQueue <Runnable > workQueue, ThreadFactory  threadFactory, RejectedExecutionHandler  handler)
          ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅ͸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
 
¸Þ¼­µå °³¿ä
protected  void afterExecute (Runnable  r, Throwable  t)
          ÁöÁ¤µÈ Runnable ½ÇÇà ¿Ï·á½Ã¿¡ È£ÃâµÇ´Â ¸Þ¼­µå.
 boolean awaitTermination (long timeout, TimeUnit  unit)
          ¼Ë´Ù¿î ¿ä±¸ ÈÄ¿¡ ¸ðµç ŽºÅ©°¡ ½ÇÇàÀ» ¿Ï·áÇϴ ŸÀÓ ¾Æ¿ôÀÌ ¹ß»ýÇÏ´Â ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â ¾î¶² °ÍÀΰ¡°¡ ÃÖÃÊ·Î ÀϾ ¶§±îÁö ºí·Ï ÇÕ´Ï´Ù.
protected  void beforeExecute (Thread  t, Runnable  r)
          ÁöÁ¤µÈ thread³»¿¡¼­ ÁöÁ¤µÈ Runnable ½ÇÇà¿¡ ¾Õ¼­ È£ÃâµÇ´Â ¸Þ¼­µå.
 void execute (Runnable  command)
          ÁöÁ¤µÈ ŽºÅ©¸¦ Àå·¡ÀÇ ¾ðÁ¨°¡ ½ÇÇàÇÕ´Ï´Ù.
protected  void finalize ()
          ÀÌ executor°¡ ÂüÁ¶µÇ´Â °ÍÀÌ ¾ø¾îÁ³À» °æ¿ì¿¡ shutdown¸¦ È£ÃâÇÕ´Ï´Ù.
 int getActiveCount ()
          Å½ºÅ©¸¦ È°¼ºÈ­ ½ÇÇàÁßÀÇ threadÀÇ °³¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 long getCompletedTaskCount ()
          ½ÇÇàÀÌ ¿Ï·áÇÑ Å½ºÅ©ÀÇ ´ëü·ÎÀÇ ÃѼö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 int getCorePoolSize ()
          threadÀÇ ÄÚ¾î¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 long getKeepAliveTime (TimeUnit  unit)
          threadÀÇ Åµ¾ó¶óÀÌºê ½Ã°£À» ¸®ÅÏÇÕ´Ï´Ù.
 int getLargestPoolSize ()
          Áö±Ý±îÁö µ¿½Ã¿¡ Ç®¿¡ Á¸ÀçÇÑ threadÀÇ ÃÖ´ë¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 int getMaximumPoolSize ()
          Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 int getPoolSize ()
          Ç®³»ÀÇ ÇöÀçÀÇ thread¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 BlockingQueue <Runnable > getQueue ()
          ÀÌ executor°¡ »ç¿ëÇϴ ŽºÅ© Å¥¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 RejectedExecutionHandler getRejectedExecutionHandler ()
          ½ÇÇà ºÒ°¡´ÉÇÑ Å½ºÅ©¿ëÀÇ ÇöÀçÀÇ Çڵ鷯¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 long getTaskCount ()
          ½ÇÇàÀÌ ½ºÄÉÁÙ µÈ ŽºÅ©ÀÇ ´ëü·ÎÀÇ ÃѼö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 ThreadFactory getThreadFactory ()
          »õ·Î¿î threadÀÇ ÀÛ¼º¿¡ »ç¿ëÇÏ´Â thread ÆÑÅ丮¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean isShutdown ()
          ÀÌ executor°¡ ¼Ë´Ù¿î ÇßÀ» °æ¿ì, true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean isTerminated ()
          ¼Ë´Ù¿î¿¡ ÀÌ¾î ¸ðµç ŽºÅ©°¡ ¿Ï·áÇßÀ» °æ¿ì¿¡ true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean isTerminating ()
          shutdown ¶Ç´Â shutdownNow ÈÄ¿¡ ÀÌ executor°¡ Á¾·á 󸮸¦ ½ÇÇàÁßÀÌÁö¸¸, ¿ÏÀüÇÏ°Ô Á¾·áÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì, true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 int prestartAllCoreThreads ()
          ¸ðµç ÄÚ¾î thread¸¦ °³½ÃÇØ,ÀÚ½Ä µ¹ »óÅ·Π´ë±â½Ãŵ´Ï´Ù.
 boolean prestartCoreThread ()
          ÄÚ¾î thread¸¦ °³½ÃÇØ,ÀÚ½Ä µ¹ »óÅ·Π´ë±â½Ãŵ´Ï´Ù.
 void purge ()
          ÀÛ¾÷ Å¥·ÎºÎÅÍ »èÁ¦µÈ Future ŽºÅ© ¸ðµç »èÁ¦¸¦ ½ÃµµÇÕ´Ï´Ù.
 boolean remove (Runnable  task)
          ÀÌ Å½ºÅ©°¡ Á¸ÀçÇÏ´Â °æ¿ì, executor ³»ºÎ Å¥·ÎºÎÅÍ »èÁ¦ÇØ, ¾ÆÁ÷ ½ÃÀÛÇÏ°í ÀÖÁö ¾ÊÀ¸¸é ½ÇÇàµÇÁö ¾Ê°Ô ÇÕ´Ï´Ù.
 void setCorePoolSize (int corePoolSize)
          threadÀÇ ÄÚ¾î¼ö¸¦ ¼³Á¤ÇÕ´Ï´Ù.
 void setKeepAliveTime (long time, TimeUnit  unit)
          thread°¡ Á¾·áÇϱâ Àü¿¡ ÀÚ½Ä µ¹ »óÅ¿¡ ¸Ó¹«¸£´Â Á¦ÇÑ ½Ã°£À» ¼³Á¤ÇÕ´Ï´Ù.
 void setMaximumPoolSize (int maximumPoolSize)
          Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö¸¦ ¼³Á¤ÇÕ´Ï´Ù.
 void setRejectedExecutionHandler (RejectedExecutionHandler  handler)
          ½ÇÇà ºÒ°¡´ÉÇÑ Å½ºÅ©¿ëÀÇ »õ·Î¿î Çڵ鷯¸¦ ¼³Á¤ÇÕ´Ï´Ù.
 void setThreadFactory (ThreadFactory  threadFactory)
          »õ·Î¿î threadÀÇ ÀÛ¼º¿¡ »ç¿ëÇÏ´Â thread ÆÑÅ丮¸¦ ¼³Á¤ÇÕ´Ï´Ù.
 void shutdown ()
          ¼ø¼­¿¡ µû¶ó ½ÇÇàµÇ´Â ¼Ë´Ù¿îÀ» °³½ÃÇÕ´Ï´Ù.
 List <Runnable > shutdownNow ()
          ½ÇÇàÁßÀÇ È°¼ºÈ­µÈ ŽºÅ© ¸ðµç Á¤Áö¸¦ ½ÃµµÇØ ´ë±âÁßÀÇ Å½ºÅ©ÀÇ Ã³¸®¸¦ Á¤ÁöÇØ, ½ÇÇàÀ» ´ë±âÇÏ°í ÀÖ´ø ŽºÅ©ÀÇ ¸®½ºÆ®¸¦ ¸®ÅÏÇÕ´Ï´Ù.
protected  void terminated ()
          Executor°¡ Á¾·áµÇ¾úÀ» ¶§¿¡ È£ÃâµÇ´Â ¸Þ¼­µå.
 
Ŭ·¡½º java.util.concurrent. AbstractExecutorService ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼­µå
invokeAll, invokeAll, invokeAny, invokeAny, submit, submit, submit
 
Ŭ·¡½º java.lang. Object ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼­µå
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

»ý¼ºÀÚ »ó¼¼

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit  unit,
                          BlockingQueue <Runnable > workQueue)
ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅÍ ¹× µðÆúÆ®ÀÇ thread ÆÑÅ丮 ¹× Çڵ鷯¸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÀÌ ¹ü¿ë »ý¼ºÀÚ¸¦ »ç¿ëÇÏ´Â °Íº¸´Ùµµ, Executors ÆÑÅ丮 ¸Þ¼­µåÀÇ 1°³¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÑ °æ¿ì°¡ ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
corePoolSize - Ç®³» ·Î À¯ÁöÇÏ´Â threadÀÇ ¼ö (¾ÆÀ̵¹ »óÅÂÀÇ threadµµ Æ÷ÇÔÇÑ´Ù)
maximumPoolSize - Ç®¿¡¼­ Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö
keepAliveTime - threadÀÇ ¼ö°¡ Äھ´Ù ¸¹Àº °æ¿ì, ÀÌ°ÍÀº ÃÊ°úÇÑÀÚ½Ä µ¹ »óÅÂÀÇ thread°¡ Á¾·áÀü¿¡ »õ·Î¿î ŽºÅ©¸¦ ´ë±âÇÏ´Â ÃÖ´ë ½Ã°£ÀÌ µÇ´Â
unit - keepAliveTime ÀμöÀÇ ½Ã°£ ´ÜÀ§
workQueue - ŽºÅ©¸¦ ½ÇÇàÇϱâ Àü¿¡ ŽºÅ© º¸°ü À¯Áö¿¡ »ç¿ëÇϴ ť. ÀÌ Å¥´Â execute ¸Þ¼­µå¿¡ ÀÇÇØ ¼Û½ÅµÈ Runnable ŽºÅ©¸¸À» º¸°ü À¯ÁöÇÑ´Ù
¿¹¿Ü:
IllegalArgumentException - corePoolSize ¶Ç´Â keepAliveTime°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì, maximumPoolSize°¡ Á¦·Î ¾Æ·¡ÀÇ °æ¿ì, ¶Ç´Â corePoolSize°¡ maximumPoolSize º¸´Ù Å« °æ¿ì
NullPointerException - workQueue°¡ nullÀÎ °æ¿ì

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit  unit,
                          BlockingQueue <Runnable > workQueue,
                          ThreadFactory  threadFactory)
ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅ͸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
corePoolSize - Ç®³» ·Î À¯ÁöÇÏ´Â threadÀÇ ¼ö (¾ÆÀ̵¹ »óÅÂÀÇ threadµµ Æ÷ÇÔÇÑ´Ù)
maximumPoolSize - Ç®¿¡¼­ Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö
keepAliveTime - threadÀÇ ¼ö°¡ Äھ´Ù ¸¹Àº °æ¿ì, ÀÌ°ÍÀº ÃÊ°úÇÑÀÚ½Ä µ¹ »óÅÂÀÇ thread°¡ Á¾·áÀü¿¡ »õ·Î¿î ŽºÅ©¸¦ ´ë±âÇÏ´Â ÃÖ´ë ½Ã°£ÀÌ µÇ´Â
unit - keepAliveTime ÀμöÀÇ ½Ã°£ ´ÜÀ§
workQueue - ŽºÅ©¸¦ ½ÇÇàÇϱâ Àü¿¡ ŽºÅ© º¸°ü À¯Áö¿¡ »ç¿ëÇϴ ť. ÀÌ Å¥´Â execute ¸Þ¼­µå¿¡ ÀÇÇØ ¼Û½ÅµÈ Runnable ŽºÅ©¸¸À» º¸°ü À¯ÁöÇÏ´Â
threadFactory - executor°¡ »õ·Î¿î thread¸¦ ÀÛ¼ºÇÒ ¶§¿¡ »ç¿ëÇÏ´Â ÆÑÅ丮
¿¹¿Ü:
IllegalArgumentException - corePoolSize ¶Ç´Â keepAliveTime°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì, maximumPoolSize°¡ Á¦·Î ¾Æ·¡ÀÇ °æ¿ì, ¶Ç´Â corePoolSize°¡ maximumPoolSize º¸´Ù Å« °æ¿ì
NullPointerException - workQueue ¶Ç´Â threadFactory°¡ nullÀÎ °æ¿ì

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit  unit,
                          BlockingQueue <Runnable > workQueue,
                          RejectedExecutionHandler  handler)
ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅ͸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
corePoolSize - Ç®³» ·Î À¯ÁöÇÏ´Â threadÀÇ ¼ö (¾ÆÀ̵¹ »óÅÂÀÇ threadµµ Æ÷ÇÔÇÑ´Ù)
maximumPoolSize - Ç®¿¡¼­ Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö
keepAliveTime - threadÀÇ ¼ö°¡ Äھ´Ù ¸¹Àº °æ¿ì, ÀÌ°ÍÀº ÃÊ°úÇÑÀÚ½Ä µ¹ »óÅÂÀÇ thread°¡ Á¾·áÀü¿¡ »õ·Î¿î ŽºÅ©¸¦ ´ë±âÇÏ´Â ÃÖ´ë ½Ã°£ÀÌ µÇ´Â
unit - keepAliveTime ÀμöÀÇ ½Ã°£ ´ÜÀ§
workQueue - ŽºÅ©¸¦ ½ÇÇàÇϱâ Àü¿¡ ŽºÅ© º¸°ü À¯Áö¿¡ »ç¿ëÇϴ ť. ÀÌ Å¥´Â execute ¸Þ¼­µå¿¡ ÀÇÇØ ¼Û½ÅµÈ Runnable ŽºÅ©¸¸À» º¸°ü À¯ÁöÇÏ´Â
handler - thread°¡ Á¦ÇÑ¿¡ À̸£´ÂÁö, Å¥°¡ ¿ë·®¿¡ À̸£·¶±â ¶§¹®¿¡ ½ÇÇàÀÌ ºí·Ï µÇ¾úÀ» °æ¿ì¿¡ »ç¿ëÇÏ´Â Çڵ鷯
¿¹¿Ü:
IllegalArgumentException - corePoolSize ¶Ç´Â keepAliveTime°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì, maximumPoolSize°¡ Á¦·Î ¾Æ·¡ÀÇ °æ¿ì, ¶Ç´Â corePoolSize°¡ maximumPoolSize º¸´Ù Å« °æ¿ì
NullPointerException - workQueue ¶Ç´Â handler°¡ nullÀÎ °æ¿ì

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit  unit,
                          BlockingQueue <Runnable > workQueue,
                          ThreadFactory  threadFactory,
                          RejectedExecutionHandler  handler)
ÁöÁ¤µÈ Ãʱâ ÆĶó¹ÌÅ͸¦ »ç¿ëÇØ, »õ·Î¿î ThreadPoolExecutor¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
corePoolSize - Ç®³» ·Î À¯ÁöÇÏ´Â threadÀÇ ¼ö (¾ÆÀ̵¹ »óÅÂÀÇ threadµµ Æ÷ÇÔÇÑ´Ù)
maximumPoolSize - Ç®¿¡¼­ Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö
keepAliveTime - threadÀÇ ¼ö°¡ Äھ´Ù ¸¹Àº °æ¿ì, ÀÌ°ÍÀº ÃÊ°úÇÑÀÚ½Ä µ¹ »óÅÂÀÇ thread°¡ Á¾·áÀü¿¡ »õ·Î¿î ŽºÅ©¸¦ ´ë±âÇÏ´Â ÃÖ´ë ½Ã°£ÀÌ µÇ´Â
unit - keepAliveTime ÀμöÀÇ ½Ã°£ ´ÜÀ§
workQueue - ŽºÅ©¸¦ ½ÇÇàÇϱâ Àü¿¡ ŽºÅ© º¸°ü À¯Áö¿¡ »ç¿ëÇϴ ť. ÀÌ Å¥´Â execute ¸Þ¼­µå¿¡ ÀÇÇØ ¼Û½ÅµÈ Runnable ŽºÅ©¸¸À» º¸°ü À¯ÁöÇÏ´Â
threadFactory - executor°¡ »õ·Î¿î thread¸¦ ÀÛ¼ºÇÒ ¶§¿¡ »ç¿ëÇÏ´Â ÆÑÅ丮
handler - thread°¡ Á¦ÇÑ¿¡ À̸£´ÂÁö, Å¥°¡ ¿ë·®¿¡ À̸£·¶±â ¶§¹®¿¡ ½ÇÇàÀÌ ºí·Ï µÇ¾úÀ» °æ¿ì¿¡ »ç¿ëÇÏ´Â Çڵ鷯
¿¹¿Ü:
IllegalArgumentException - corePoolSize ¶Ç´Â keepAliveTime°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì, maximumPoolSize°¡ Á¦·Î ¾Æ·¡ÀÇ °æ¿ì, ¶Ç´Â corePoolSize°¡ maximumPoolSize º¸´Ù Å« °æ¿ì
NullPointerException - workQueue, threadFactory, ¶Ç´Â handler°¡ nullÀÎ °æ¿ì
¸Þ¼­µåÀÇ »ó¼¼

execute

public void execute(Runnable  command)
ÁöÁ¤µÈ ŽºÅ©¸¦ Àå·¡ÀÇ ¾ðÁ¨°¡ ½ÇÇàÇÕ´Ï´Ù. ÀÌ Å½ºÅ©´Â »õ·Î¿î thread·Î ½ÇÇàµÇ´Â Àϵµ, Ç® µÈ ±âÁ¸ÀÇ thread·Î ½ÇÇàµÇ´Â Àϵµ ÀÖ½À´Ï´Ù.ÀÌ executor°¡ ¼Ë´Ù¿î ÇÏ°í ÀÖ´ÂÁö, ¿ë·®ÀÌ °¡µæ µÇ¾ú±â ¶§¹®¿¡ ŽºÅ©¸¦ ½ÇÇà¿ëÀ¸·Î ¼Û½ÅÇÒ ¼ö ¾ø´Â °æ¿ì, ŽºÅ©´Â ÇöÀçÀÇ RejectedExecutionHandler¿¡ ÀÇÇØ Ã³¸®µË´Ï´Ù.

ÆĶó¹ÌÅÍ:
command - ½ÇÇàÇϴ ŽºÅ©
¿¹¿Ü:
RejectedExecutionException - ŽºÅ©¸¦ ½ÇÇà¿ëÀ¸·Î ¹Þ¾ÆµéÀÏ ¼ö°¡ ¾ø´Â °æ¿ì, RejectedExecutionHandler ÆÇ´ÜÀ¸·Î Throw µÈ´Ù
NullPointerException - Ä¿¸àµå°¡ nullÀÎ °æ¿ì

shutdown

public void shutdown()
¼ø¼­¿¡ µû¶ó ½ÇÇàµÇ´Â ¼Ë´Ù¿îÀ» °³½ÃÇÕ´Ï´Ù. ÀÌÀü¿¡ ¼Û½ÅµÈ ŽºÅ©°¡ ½ÇÇàµË´Ï´Ù¸¸, »õ·Î¿î ŽºÅ©´Â ¹Þ¾Æµé¿©ÁöÁö ¾Ê½À´Ï´Ù. ¼Ë´Ù¿î ÈÄ¿¡ È£ÃâÀ» ½ÇÇàÇصµ, È¿°ú´Â ¾ø½À´Ï´Ù.

¿¹¿Ü:
SecurityException - ½ÃÅ¥·¯Æ¼ ¸Å´ÏÀú°¡ Á¸ÀçÇÏ´Â »óȲÀ¸·Î ¼Ë´Ù¿îÀ» ½ÇÇàÇϸé, ÀÌ ExecutorService ÀÌ È£ÃâÇØ Ãø¿¡´Â º¯°æÀÌ Çã°¡µÇÁö ¾Ê´Â thread¸¦ Á¶ÀÛÇÒ ¼ö ÀÖ´Â °æ¿ì. ÀÌ°ÍÀº, RuntimePermission ("modifyThread")¸¦ º¸°ü À¯ÁöÇÏÁö ¾Ê´ÂÁö, ½ÃÅ¥·¯Æ¼ ¸Å´ÏÀúÀÇ checkAccess ¸Þ¼­µå°¡ ¾×¼¼½º¸¦ °ÅºÎÇϱâ À§ÇØÀÌ´Ù

shutdownNow

public List <Runnable > shutdownNow()
½ÇÇàÁßÀÇ È°¼ºÈ­µÈ ŽºÅ© ¸ðµç Á¤Áö¸¦ ½ÃµµÇØ ´ë±âÁßÀÇ Å½ºÅ©ÀÇ Ã³¸®¸¦ Á¤ÁöÇØ, ½ÇÇàÀ» ´ë±âÇÏ°í ÀÖ´ø ŽºÅ©ÀÇ ¸®½ºÆ®¸¦ ¸®ÅÏÇÕ´Ï´Ù.

ÀÌ ±¸ÇöÀº Thread.interrupt()¸¦ °³ÀÔ½ÃÄÑ Å½ºÅ©¸¦ Ãë¼ÒÇÕ´Ï´Ù. ÀÌ ¶§¹®¿¡ ¸î°³ÀÇ Å½ºÅ©°¡ ¸¶½ºÅ©¸¦ ½ÇÇàÇÏ´ÂÁö, ÀÎÅÍ·´Æ®¿¡ÀÇ ÀÀ´ä¿¡ ½ÇÆÐÇϸé, ±× ŽºÅ©°¡ °áÄÚ Á¾·áÇÏÁö ¾Ê°Ô µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
½ÇÇàÀÌ °³½ÃµÇÁö ¾Ê¾Ò´ø ŽºÅ©ÀÇ ¸®½ºÆ®
¿¹¿Ü:
SecurityException - ½ÃÅ¥·¯Æ¼ ¸Å´ÏÀú°¡ Á¸ÀçÇÏ´Â »óȲÀ¸·Î ¼Ë´Ù¿îÀ» ½ÇÇàÇϸé, ÀÌ ExecutorService ÀÌ È£ÃâÇØ Ãø¿¡´Â º¯°æÀÌ Çã°¡µÇÁö ¾Ê´Â thread¸¦ Á¶ÀÛÇÒ ¼ö ÀÖ´Â °æ¿ì. ÀÌ°ÍÀº, RuntimePermission ("modifyThread")¸¦ º¸°ü À¯ÁöÇÏÁö ¾Ê´ÂÁö, ½ÃÅ¥·¯Æ¼ ¸Å´ÏÀúÀÇ checkAccess ¸Þ¼­µå°¡ ¾×¼¼½º¸¦ °ÅºÎÇϱâ À§ÇØÀÌ´Ù

isShutdown

public boolean isShutdown()
ÀÎÅÍÆäÀ̽º ExecutorService ±â¼ú:
ÀÌ executor°¡ ¼Ë´Ù¿î ÇßÀ» °æ¿ì, true¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÀÌ executor°¡ ¼Ë´Ù¿î ÇßÀ» °æ¿ì´Â true

isTerminating

public boolean isTerminating()
shutdown ¶Ç´Â shutdownNow ÈÄ¿¡ ÀÌ executor°¡ Á¾·á 󸮸¦ ½ÇÇàÁßÀÌÁö¸¸, ¿ÏÀüÇÏ°Ô Á¾·áÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì, true¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â µð¹ö±×·Î À¯¿ëÇÑ °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¼Ë´Ù¿î ÈÄ, ÃæºÐÇÑ ½Ã°£ÀÌ °æ°úÇÏ°í ³ª¼­ true°¡ µ¹·ÁÁÖ°íÁ³À» °æ¿ì, ¼Û½ÅµÈ ŽºÅ©°¡ ÀÎÅÍ·´Æ®¸¦ ¹«½ÃÇß´ÂÁö ¾ïÁ¦Ç߱⠶§¹®¿¡ ÀÌ executor°¡ ÀûÁ¤ÇÏ°Ô Á¾·áÇÏ°í ÀÖÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
Á¾·áÁßÀÌÁö¸¸, ¿Ï·áÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì´Â true

isTerminated

public boolean isTerminated()
ÀÎÅÍÆäÀ̽º ExecutorService ±â¼ú:
¼Ë´Ù¿î¿¡ ÀÌ¾î ¸ðµç ŽºÅ©°¡ ¿Ï·áÇßÀ» °æ¿ì¿¡ true¸¦ ¸®ÅÏÇÕ´Ï´Ù. shutdown ¶Ç´Â shutdownNow°¡ ÃÖÃÊ·Î ºÒ·Á°¡ Áö ¾Ê´Â ÇÑ, isTerminated´Â °áÄÚ true·Î´Â µÇÁö ¾Ê½À´Ï´Ù.

¹Ýȯ°ª:
¼Ë´Ù¿î¿¡ ÀÌ¾î ¸ðµç ŽºÅ©°¡ ¿Ï·áÇßÀ» °æ¿ì¿¡ true

awaitTermination

public boolean awaitTermination(long timeout,
                                TimeUnit  unit)
                         throws InterruptedException 
ÀÎÅÍÆäÀ̽º ExecutorService ±â¼ú:
¼Ë´Ù¿î ¿ä±¸ ÈÄ¿¡ ¸ðµç ŽºÅ©°¡ ½ÇÇàÀ» ¿Ï·áÇϴ ŸÀÓ ¾Æ¿ôÀÌ ¹ß»ýÇÏ´Â ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â ¾î¶² °ÍÀΰ¡°¡ ÃÖÃÊ·Î ÀϾ ¶§±îÁö ºí·Ï ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
timeout - ´ë±âÇÏ´Â ÃÖÀå ½Ã°£
unit - timeout ÀμöÀÇ ½Ã°£ ´ÜÀ§
¹Ýȯ°ª:
ÀÌ executor°¡ Á¾·áµÇ´Â °æ¿ì´Â true, Á¾·áÀü¿¡ ŸÀÓ ¾Æ¿ôÀÌ °æ°úÇßÀ» °æ¿ì´Â false
¿¹¿Ü:
InterruptedException - ´ë±âÁß¿¡ ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì

finalize

protected void finalize()
ÀÌ executor°¡ ÂüÁ¶µÇ´Â °ÍÀÌ ¾ø¾îÁ³À» °æ¿ì¿¡ shutdown¸¦ È£ÃâÇÕ´Ï´Ù.

¿À¹ö¶óÀ̵å(override):
Ŭ·¡½º Object ³»ÀÇ finalize

setThreadFactory

public void setThreadFactory(ThreadFactory  threadFactory)
»õ·Î¿î threadÀÇ ÀÛ¼º¿¡ »ç¿ëÇÏ´Â thread ÆÑÅ丮¸¦ ¼³Á¤ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
threadFactory - »õ·Î¿î thread ÆÑÅ丮
¿¹¿Ü:
NullPointerException - threadFactory°¡ nullÀÎ °æ¿ì
°ü·Ã Ç׸ñ:
getThreadFactory()

getThreadFactory

public ThreadFactory  getThreadFactory()
»õ·Î¿î threadÀÇ ÀÛ¼º¿¡ »ç¿ëÇÏ´Â thread ÆÑÅ丮¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÇöÀçÀÇ thread ÆÑÅ丮
°ü·Ã Ç׸ñ:
setThreadFactory(java.util.concurrent.ThreadFactory)

setRejectedExecutionHandler

public void setRejectedExecutionHandler(RejectedExecutionHandler  handler)
½ÇÇà ºÒ°¡´ÉÇÑ Å½ºÅ©¿ëÀÇ »õ·Î¿î Çڵ鷯¸¦ ¼³Á¤ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
handler - »õ·Î¿î Çڵ鷯
¿¹¿Ü:
NullPointerException - Çڵ鷯°¡ nullÀÎ °æ¿ì
°ü·Ã Ç׸ñ:
getRejectedExecutionHandler()

getRejectedExecutionHandler

public RejectedExecutionHandler  getRejectedExecutionHandler()
½ÇÇà ºÒ°¡´ÉÇÑ Å½ºÅ©¿ëÀÇ ÇöÀçÀÇ Çڵ鷯¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÇöÀçÀÇ Çڵ鷯
°ü·Ã Ç׸ñ:
setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler)

getQueue

public BlockingQueue <Runnable > getQueue()
ÀÌ executor°¡ »ç¿ëÇϴ ŽºÅ© Å¥¸¦ ¸®ÅÏÇÕ´Ï´Ù. ŽºÅ© Å¥¿¡ÀÇ ¾×¼¼½º´Â ÁÖ·Î µð¹ö±× ¹× °¨½Ã·Î »ç¿ëÇÕ´Ï´Ù. ÀÌ Å¥´Â È°¼ºÈ­ »ç¿ëµÇ°í ÀÖÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ŽºÅ© Å¥ÀÇ Ãëµæ¿¡ÀÇÇØ Å¥¿¡ ³Ö¾îÁø ŽºÅ©ÀÇ ½ÇÇàÀ» ¹æÇØÇÒ ¼ö ÀÖÀ» °ÍÀº ¾ø½À´Ï´Ù.

¹Ýȯ°ª:
ŽºÅ© Å¥

remove

public boolean remove(Runnable  task)
ÀÌ Å½ºÅ©°¡ Á¸ÀçÇÏ´Â °æ¿ì, executor ³»ºÎ Å¥·ÎºÎÅÍ »èÁ¦ÇØ, ¾ÆÁ÷ ½ÃÀÛÇÏ°í ÀÖÁö ¾ÊÀ¸¸é ½ÇÇàµÇÁö ¾Ê°Ô ÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â Ãë¼Ò schemaÀÇ ÀϺημ­ À¯È¿ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ³»ºÎ Å¥¿¡ ¹èÄ¡µÇ±â Àü¿¡ ´Ù¸¥ Çü½Ä¿¡ º¯È¯µÈ ŽºÅ©´Â »èÁ¦¿¡ ½ÇÆÐÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, submit¸¦ »ç¿ëÇØ ÀÔ·ÂµÈ Å½ºÅ©´Â Future »óŸ¦ À¯ÁöÇÏ´Â Çü½Ä¿¡ º¯È¯µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ´Ù¸¸, ÀÌ °æ¿ì´Â purge() ¸Þ¼­µå¸¦ »ç¿ëÇØ ÀÌ·¯ÇÑ »èÁ¦µÈ Future¸¦ »èÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
task - »èÁ¦Çϴ ŽºÅ©
¹Ýȯ°ª:
ŽºÅ©°¡ »èÁ¦µÇ¾úÀ» °æ¿ì´Â true

purge

public void purge()
ÀÛ¾÷ Å¥·ÎºÎÅÍ »èÁ¦µÈ Future ŽºÅ© ¸ðµç »èÁ¦¸¦ ½ÃµµÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ±â´É¿¡ ´Ù¸¥ ¿µÇâÀ» ¹ÌÄ¥¸®°¡ ¾ø´Â ±â¾ï ¿µ¿ªÀÇ Àç»ý Á¶ÀÛ¿¡ µµ¿òÀÌ µË´Ï´Ù. »èÁ¦µÈ ŽºÅ©´Â °áÄÚ ½ÇÇàµË´Ï´Ù¸¸, ¿öÄ«½º·¹µå°¡ À̰͵éÀ» È°¼ºÈ­ »èÁ¦ÇÒ ¼ö ÀÖ°Ô µÉ ¶§±îÁö ÀÛ¾÷ Å¥¿¡ ÃàÀûµË´Ï´Ù. ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇϸé, ±×·¯ÇÑ »èÁ¦¸¦ Áï½Ã ½ÃµµÇÕ´Ï´Ù. ´Ù¸¸, ´Ù¸¥ thread·ÎºÎÅÍÀÇ °£¼·ÀÌ Á¸ÀçÇÏ´Â °æ¿ì, ÀÌ ¸Þ¼­µå´Â ŽºÅ©ÀÇ »èÁ¦¿¡ ½ÇÆÐÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.


setCorePoolSize

public void setCorePoolSize(int corePoolSize)
threadÀÇ ÄÚ¾î¼ö¸¦ ¼³Á¤ÇÕ´Ï´Ù. ÀÌ°ÍÀº »ý¼ºÀÚ À¸·Î ¼³Á¤µÈ °ªÀ» ¸ðµÎ ¿À¹ö¶óÀ̵å(override) ÇÕ´Ï´Ù. »õ·Î¿î °ªÀÌ ÇöÀçÀÇ °ªº¸´Ù ÀÛÀº °æ¿ì, ÃÊ°úÇÏ°í ÀÖ´Â ±âÁ¸ÀÇ thread´ÂÀÚ½Ä µ¹ »óÅ°¡ µÇ¸é Á¾·áÇÕ´Ï´Ù. »õ·Î¿î °ªÀÌ ÇöÀçÀÇ °ªº¸´Ù Å« °æ¿ì, ÇÊ¿ä¿¡ µû¶ó¼­ »õ·Î¿î thread°¡ ½ÃÀ۵Ǿî Å¥¿¡ ³Ö¾îÁø ¸ðµç ŽºÅ©°¡ ½ÇÇàµË´Ï´Ù.

ÆĶó¹ÌÅÍ:
corePoolSize - »õ·Î¿î ÄÚ¾î »çÀÌÁî
¿¹¿Ü:
IllegalArgumentException - corePoolSize°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì
°ü·Ã Ç׸ñ:
getCorePoolSize()

getCorePoolSize

public int getCorePoolSize()
threadÀÇ ÄÚ¾î¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
threadÀÇ ÄÚ¾î¼ö
°ü·Ã Ç׸ñ:
setCorePoolSize(int)

prestartCoreThread

public boolean prestartCoreThread()
ÄÚ¾î thread¸¦ °³½ÃÇØ,ÀÚ½Ä µ¹ »óÅ·Π´ë±â½Ãŵ´Ï´Ù. ÀÌ°ÍÀº »õ·Î¿î ŽºÅ©°¡ ½ÇÇàµÇ´Â °æ¿ì¿¡°Ô¸¸, ÄÚ¾î thread °³½ÃÀÇ µðÆúÆ® Á¤Ã¥¸¦ ¿À¹ö¶óÀ̵å(override) ÇÕ´Ï´Ù. ¸ðµç ÄÚ¾î thread°¡ ÀÌ¹Ì °³½ÃµÇ°í ÀÖ´Â °æ¿ì, ÀÌ ¸Þ¼­µå´Â false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
thread°¡ °³½ÃµÇ°í ÀÖ¾úÀ» °æ¿ì´Â true

prestartAllCoreThreads

public int prestartAllCoreThreads()
¸ðµç ÄÚ¾î thread¸¦ °³½ÃÇØ,ÀÚ½Ä µ¹ »óÅ·Π´ë±â½Ãŵ´Ï´Ù. ÀÌ°ÍÀº »õ·Î¿î ŽºÅ©ÀÇ ½ÇÇà½Ã¿¡°Ô¸¸, ÄÚ¾î thread °³½ÃÀÇ µðÆúÆ® Á¤Ã¥¸¦ ¿À¹ö¶óÀ̵å(override) ÇÕ´Ï´Ù.

¹Ýȯ°ª:
°³½ÃµÈ threadÀÇ ¼ö

setMaximumPoolSize

public void setMaximumPoolSize(int maximumPoolSize)
Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö¸¦ ¼³Á¤ÇÕ´Ï´Ù. ÀÌ°ÍÀº »ý¼ºÀÚ³»¿¡¼­ ¼³Á¤µÈ ¸ðµç °ªÀ» ¿À¹ö¶óÀ̵å(override) ÇÕ´Ï´Ù. »õ·Î¿î °ªÀÌ ÇöÀçÀÇ °ªº¸´Ù ÀÛÀº °æ¿ì, ÃÊ°úÇÑ ±âÁ¸ÀÇ thread´Â ´ÙÀ½¿¡ ÀÚ½Ä µ¹ »óÅ°¡ µÇ¸é Á¾·áÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
maximumPoolSize - »õ·Î¿î ÃÖ´ë°ª
¿¹¿Ü:
IllegalArgumentException - maximumPoolSize°¡ Á¦·Î ¹Ì¸¸ ¶Ç´ÂÄÚ¾î Ç® »çÀÌÁîÀÎ °æ¿ì
°ü·Ã Ç׸ñ:
getMaximumPoolSize()

getMaximumPoolSize

public int getMaximumPoolSize()
Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
Çã°¡µÇ´Â threadÀÇ ÃÖ´ë¼ö
°ü·Ã Ç׸ñ:
setMaximumPoolSize(int)

setKeepAliveTime

public void setKeepAliveTime(long time,
                             TimeUnit  unit)
thread°¡ Á¾·áÇϱâ Àü¿¡ ÀÚ½Ä µ¹ »óÅ¿¡ ¸Ó¹«¸£´Â Á¦ÇÑ ½Ã°£À» ¼³Á¤ÇÕ´Ï´Ù. ÇöÀç Ç®³»¿¡ ÀÖ´Â threadÀÇ ÄÚ¾î¼öº¸´Ù thread°¡ ¸¹Àº °æ¿ì, ÀÌ ±â°£¸¸ ŽºÅ©¸¦ ó¸®ÇÏÁö ¾Ê°í ´ë±âÇÑ ÈÄ¿¡ ÃÊ°úÇÑ thread°¡ Á¾·áÇÕ´Ï´Ù. ÀÌ°ÍÀº »ý¼ºÀÚ À¸·Î ¼³Á¤µÈ ¸ðµç °ªÀ» ¿À¹ö¶óÀ̵å(override) ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
time - ´ë±â ½Ã°£. ½Ã°£°ªÀÌ Á¦·ÎÀÇ °æ¿ì, ÃÊ°úÇÑ thread´Â ŽºÅ©ÀÇ ½ÇÇà ÈÄ Áï½Ã Á¾·áÇÏ´Â
unit - time ÀμöÀÇ ½Ã°£ ´ÜÀ§
¿¹¿Ü:
IllegalArgumentException - ½Ã°£ÀÌ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì
°ü·Ã Ç׸ñ:
getKeepAliveTime(java.util.concurrent.TimeUnit)

getKeepAliveTime

public long getKeepAliveTime(TimeUnit  unit)
threadÀÇ Åµ¾ó¶óÀÌºê ½Ã°£À» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ°ÍÀº ÄÚ¾î Ç® »çÀÌÁ ÃÊ°úÇÑ thread°¡ Á¾·áÇϱâ Àü¿¡ ÀÚ½Ä µ¹ »óÅ¿¡ ¸Ó¹«¸£´Â ±â°£ÀÔ´Ï´Ù.

ÆĶó¹ÌÅÍ:
unit - ±â´ëµÇ´Â °á°úÀÇ ½Ã°£ ´ÜÀ§
¹Ýȯ°ª:
Á¦ÇÑ ½Ã°£
°ü·Ã Ç׸ñ:
setKeepAliveTime(long, java.util.concurrent.TimeUnit)

getPoolSize

public int getPoolSize()
Ç®³»ÀÇ ÇöÀçÀÇ thread¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
threadÀÇ ¼ö

getActiveCount

public int getActiveCount()
ŽºÅ©¸¦ È°¼ºÈ­ ½ÇÇàÁßÀÇ threadÀÇ °³¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
threadÀÇ ¼ö

getLargestPoolSize

public int getLargestPoolSize()
Áö±Ý±îÁö µ¿½Ã¿¡ Ç®¿¡ Á¸ÀçÇÑ threadÀÇ ÃÖ´ë¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
threadÀÇ ¼ö

getTaskCount

public long getTaskCount()
½ÇÇàÀÌ ½ºÄÉÁÙ µÈ ŽºÅ©ÀÇ ´ëü·ÎÀÇ ÃѼö¸¦ ¸®ÅÏÇÕ´Ï´Ù. ŽºÅ© ¹× thread »óÅ´ °è»êÁß¿¡ µ¿ÀûÀ¸·Î º¯È­ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ ¸®ÅÏµÈ °ªÀº °³»ê¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù¸¸, ÀÏ·ÃÀÇ È£ÃâÀ» ÅëÇؼ­ °¨¼ÒÇÒ °ÍÀº ¾ø½À´Ï´Ù.

¹Ýȯ°ª:
ŽºÅ©ÀÇ ¼ö

getCompletedTaskCount

public long getCompletedTaskCount()
½ÇÇàÀÌ ¿Ï·áÇÑ Å½ºÅ©ÀÇ ´ëü·ÎÀÇ ÃѼö¸¦ ¸®ÅÏÇÕ´Ï´Ù. ŽºÅ© ¹× thread »óÅ´ °è»êÁß¿¡ µ¿ÀûÀ¸·Î º¯È­ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ ¸®ÅÏµÈ °ªÀº °³»ê¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù¸¸, ÀÏ·ÃÀÇ È£ÃâÀ» ÅëÇؼ­ °¨¼ÒÇÒ °ÍÀº ¾ø½À´Ï´Ù.

¹Ýȯ°ª:
ŽºÅ©ÀÇ ¼ö

beforeExecute

protected void beforeExecute(Thread  t,
                             Runnable  r)
ÁöÁ¤µÈ thread³»¿¡¼­ ÁöÁ¤µÈ Runnable ½ÇÇà¿¡ ¾Õ¼­ È£ÃâµÇ´Â ¸Þ¼­µå. ÀÌ ¸Þ¼­µå´Â ŽºÅ© r¸¦ ½ÇÇàÇÏ´Â thread t¿¡ ÀÇÇØ ºÒ·Á°¡ ThreadLocals ÀçÃʱâÈ­³ª ·Î±×ÀÇ ½ÇÇà¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÁÖ: º¹¼öÀÇ ¿À¹ö¶óÀ̵å(override)¸¦ ÀûÁ¤ÇÏ°Ô »óÀÚ·Î Çϱ⠶§¹®¿¡ º¸Åë, ¼­ºê Ŭ·¡½º´Â ÀÌ ¸Þ¼­µåÀÇ ¸¶Áö¸·¿¡ super.beforeExecute¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
t - ŽºÅ© r¸¦ ½ÇÇàÇÏ´Â thread
r - ½ÇÇàµÇ´Â ŽºÅ©

afterExecute

protected void afterExecute(Runnable  r,
                            Throwable  t)
ÁöÁ¤µÈ Runnable ½ÇÇà ¿Ï·á½Ã¿¡ È£ÃâµÇ´Â ¸Þ¼­µå. ÀÌ ¸Þ¼­µå´Â ŽºÅ©¸¦ ½ÇÇàÇÑ thread¿¡ ÀÇÇØ È£ÃâÇÕ´Ï´Ù. null ÀÌ¿ÜÀÇ °æ¿ì, Throwable´Â ½ÇÇàÀ» °©Àڱ⿡ Á¾·á½ÃŲ ijġ µÇÁö ¾Ê´Â ¿¹¿ÜÀÔ´Ï´Ù. ÁÖ: º¹¼öÀÇ ¿À¹ö¶óÀ̵å(override)¸¦ ÀûÀýÈ÷ »óÀÚ·Î Çϱ⠶§¹®¿¡ º¸Åë, ¼­ºê Ŭ·¡½º´Â ÀÌ ¸Þ¼­µåÀÇ ÃÖÃÊ·Î super.afterExecute¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
r - ¿Ï·áÇÑ runnable
t - Á¾·áÀÇ ¿øÀÎÀÌ µÈ ¿¹¿Ü. ½ÇÇàÀÌ Á¤»óÀûÀ¸·Î ¿Ï·áÇßÀ» °æ¿ì´Â null

terminated

protected void terminated()
Executor°¡ Á¾·áµÇ¾úÀ» ¶§¿¡ È£ÃâµÇ´Â ¸Þ¼­µå. µðÆúÆ® ±¸ÇöÀº ¾Æ¹«°Íµµ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù. ÁÖ: º¹¼öÀÇ ¿À¹ö¶óÀ̵å(override)¸¦ ÀûÁ¤ÇÏ°Ô »óÀÚ·Î Çϱ⠶§¹®¿¡ º¸Åë, ¼­ºê Ŭ·¡½º´Â ÀÌ ¸Þ¼­µå³»¿¡¼­ super.terminated¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.


JavaTM 2 Platform
Standard Ed. 5.0

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ ÂüÁ¶ÇϽʽÿÀ.