JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent
Ŭ·¡½º Semaphore

java.lang.Object 
  »óÀ§¸¦ È®Àå java.util.concurrent.Semaphore
¸ðµç ±¸ÇöµÈ ÀÎÅÍÆäÀ̽º:
Serializable

public class Semaphore
extends Object
implements Serializable

Ä«¿îÆ®¿¡ »ç¿ëµÇ´Â semaphore. °³³äÀûÀ¸·Î´Â semaphore´Â Çã°¡ ¼¼Æ®¸¦ °ü¸®ÇÕ´Ï´Ù. °¢ acquire() ´Â ÇÊ¿äÇÏ°Ô ÀÀÇØ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·ÏÀ» ½ÇÇàÇØ, ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¸é ±×°ÍÀ» ÃëµæÇÕ´Ï´Ù. °¢ release() ´Â ÆÄ ¹ÌÆ®¸¦ Ãß°¡ÇÕ´Ï´Ù¸¸, ±× ¶§ ºí·Ï ÃëµæÀÚ¸¦ ÇعæÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ´Ù¸¸, ½ÇÁ¦ÀÇ ÆÄ ¹ÌÆ® °´Ã¼´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. Semaphore´Â ÀÌ¿ë °¡´ÉÇÑ ¼öÀÇ Ä«¿îÆ®¸¦ À¯ÁöÇØ, °Å±â¿¡ ÀÀÇØ µ¿ÀÛÇÒ »ÓÀÔ´Ï´Ù.

semaphore´Â ÀϺÎÀÇ (¹°¸® ¶Ç´Â ³í¸®) ÀÚ¿ø¿¡ ¾×¼¼½º °¡´ÉÇÑ threadÀÇ ¼ö¸¦ Á¦ÇÑÇÏ´Â °æ¿ì¿¡ ÀÚÁÖ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¾îÀÌÇÏ¿¡ ³ªÅ¸³»´Â Ŭ·¡½º´Â Ç׸ñÀÇ Ç®¿¡ÀÇ ¾×¼¼½º Á¦¾î¿¡ semaphore¸¦ »ç¿ëÇÕ´Ï´Ù.


 class Pool {
   private static final MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);

   public Object getItem() throws InterruptedException {
     available.acquire();
     return getNextAvailableItem();
   }

   public void putItem(Object x) {
     if (markAsUnused(x))
       available.release();
   }

   // Not a particularly efficient data structure; just for demo

   protected Object[] items = ... whatever kinds of items being managed
   protected boolean[] used = new boolean[MAX_AVAILABLE];

   protected synchronized Object getNextAvailableItem() {
     for (int i = 0; i < MAX_AVAILABLE; ++i) {
       if (! used[i]) {
          used[i] = true;
          return items[i];
       }
     }
     return null; // not reached
   }

   protected synchronized boolean markAsUnused(Object item) {
     for (int i = 0; i < MAX_AVAILABLE; ++i) {
       if (item == items[i]) {
          if (used[i]) {
            used[i] = false;
            return true;
          } else
            return false;
       }
     }
     return false;
   }

 }
 

Ç׸ñÀ» ÃëµæÇϱâ Àü¿¡ °¢ thread´Â semaphore·ÎºÎÅÍ Ç׸ñÀÌ »ç¿ë °¡´ÉÇÑ °ÍÀ» º¸ÁõÇÏ´Â ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. Ç׸ñ 󸮰¡ ¿Ï·áÇϸé thread´Â Ç®·Î µ¹¾Æ°¡ ÆÄ ¹ÌÆ®°¡ semaphore¿¡ µ¹·ÁÁÖ°íÁ® ´Ù¸¥ thread°¡ Ç׸ñÀ» ÃëµæÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. acquire() È£Ãâ½Ã¿¡ µ¿±â ¶ôÀº º¸°ü À¯ÁöµÇÁö ¾Ê½À´Ï´Ù. µ¿±â ¶ôÀÌ º¸°ü À¯ÁöµÇ¸é, Ç׸ñÀ» Ç®¿¡ µ¹·ÁÁÙ ¼ö°¡ ¾ø°Ô µÇ±â ¶§¹®¿¡ÀÔ´Ï´Ù. semaphore´Â Ç®¿¡ÀÇ ¾×¼¼½º Á¦ÇÑÀ¸·Î ÇÊ¿äÇÑ µ¿±â¸¦, Ç® ÀÚüÀÇ ÀÏ°ü¼º À¯Áö¿¡ ÇÊ¿äÇÑ µ¿±â¿Í´Â º°°³¿¡ ĸ½¶È­ÇÕ´Ï´Ù.

semaphore´Â ÃʱâÈ­µÇ¸é, ÆÄ ¹ÌÆ®¸¦ ÃÖ´ë 1°³ »ç¿ë °¡´ÉÇÏ°Ô Çϱâ À§ÇÑ, »óÈ£ ¹èŸ ¶ôÀ¸·Î¼­ ±â´ÉÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ÀÌ°ÍÀº 1°³ÀÇ ÆÄ ¹ÌÆ®¸¦ »ç¿ë °¡´ÉÇÏ°Ô ÇÏ´Â »óÅÂ¿Í Á¦·ÎÀÇ ÆÄ ¹ÌÆ®¸¦ »ç¿ë °¡´ÉÇÏ°Ô ÇÏ´Â »óÅÂÀÇ 2°³ ¸¸À» º¸°ü À¯ÁöÇϱâ À§ÇØ, ÀϹÝÀûÀ¸·Î´Â ¡¸¹ÙÀ̳ʸ® semaphore¡¹·Î¼­ ¾Ë·ÁÁ® ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ¹ÙÀ̳ʸ® semaphore´Â (¸¹Àº Lock ±¸Çö°ú´Â ´Þ¶ó) ¡¸¶ô¡¹À» ¼ÒÀ¯ÀÚ ÀÌ¿ÜÀÇ thread¿¡ ÀÇÇØ ÇØ¹æ °¡´ÉÇÏ´Ù¶ó°í ¸»ÇÏ´Â ÇÁ·ÎÆÛƼ¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù (semaphore¿¡´Â ¼ÒÀ¯±ÇÀ̶ó°í ÇÏ´Â °³³äÀÌ ¾ø±â ¶§¹®¿¡). ÀÌ°ÍÀº µ¥µå ·ÏÀÇ º¹¿ø µî, ÀϺÎÀÇ Æ¯¼öÇÑ ÄÁÅؽºÆ®¿¡ ¼­´Â À¯¿ëÇÕ´Ï´Ù.

ÀÌ Å¬·¡½ºÀÇ »ý¼ºÀÚ´Â ¿É¼ÇÀ¸·Î fairness ÆĶó¹ÌÅ͸¦ ¹Þ¾ÆµéÀÔ´Ï´Ù. ÀÌ°ÍÀ» false ·Î ¼³Á¤Çϸé, ÀÌ Å¬·¡½º´Â thread°¡ ÆÄ ¹ÌÆ®¸¦ ¾ò´Â Â÷·Ê¸¦ º¸ÁõÇÏÁö ¾Ê½À´Ï´Ù. ƯÈ÷, ¡¸¹Ù¡¡¹ÀÌ Çã°¡µË´Ï´Ù. ÀÌ°ÍÀº, acquire()¸¦ È£ÃâÇÏ´Â thread°¡ ´ë±âÇÏ°í ÀÖ´ø thread¿¡ ¾Õ¼­ ÆÄ ¹ÌÆ®¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´Â °ÍÀ»ÀǹÌÇÕ´Ï´Ù. ³í¸®ÀûÀÌ°Ô´Â »õ·Î¿î (ºÐ)ÆíÀÇ thread°¡ ´ë±âÁßÀÇ threadÀÇ Å¥ÀÇ ¼±µÎ¿¡ ¹èÄ¡µÇ°Ô µË´Ï´Ù. fairness°¡ true ·Î ¼³Á¤µÇ¸é, semaphore´Â ¸î°³ÀÇ Ãëµæ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â thread°¡ ÀÌ·¯ÇÑ ¸Þ¼­µå°¡ 󸮵Ǵ Â÷·Ê (¼±ÀÔó ¹æÆí; FIFO)·Î ÆÄ ¹ÌÆ®¸¦ ÃëµæÇϵµ·Ï ¼±ÅõǴ °ÍÀ» º¸ÁõÇÕ´Ï´Ù. FIFO ¼ø¼­´Â ÇÊ¿¬ÀûÀ¸·Î ÀÌ·¯ÇÑ ¸Þ¼­µå³»ÀÇ Æ¯Á¤ÀÇ ³»ºÎ ½ÇÇà Æ÷ÀÎÆ®¿¡ Àû¿ëµË´Ï´Ù. ÀÌ ¶§¹®¿¡ ¾î´À thread°¡ ´Ù¸¥ threadº¸´Ù Àü¿¡ acquire¸¦ È£ÃâÇÏÁö¸¸, ´Ù¸¥ threadº¸´Ù ÈÄ¿¡ ¼ø¼­ Æ÷ÀÎÆ®¿¡ À̸£´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¶Ç, ¸Þ¼­µå·ÎºÎÅÍÀÇ º¹±Í½Ã¿¡ °°Àº ÀÏÀÌ ÀϾ °¡´É¼ºµµ ÀÖ½À´Ï´Ù. °Ô´Ù°¡ ½Ã°£ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀº tryAcquire ¸Þ¼­µå´Â ±Õµî ¼³Á¤À» Á¸ÁßÇÕ´Ï´Ù¸¸, »ç¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®´Â ¹Þ¾ÆµéÀÔ´Ï´Ù.

º¸Åë, ÀÚ¿ø¿¡ÀÇ ¾×¼¼½º Á¦¾î¿¡ »ç¿ëÇÏ´Â semaphore´Â ±Õµî¼ºÀ» À¯ÁöÇϵµ·Ï ÃʱâÈ­ÇØ, ÀÚ¿ø¿¡ÀÇ ¾×¼¼½º°¡ °ï¶õÇÏ°Ô µÇ´Â thread°¡ Á¸ÀçÇÏÁö ¾Ê°Ô ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ´Ù¸¥ Á¾·ùÀÇ µ¿±â Á¦¾î·Î semaphore¸¦ »ç¿ëÇÏ´Â °æ¿ì, ºñ±ÕµîÀÇ ¼ø¼­ºÎ¿¡ ÇÑ throughputÀÇ ÀÌÁ¡ÀÌ ±Õµî¼ºÀÇ °í·Áº¸´Ù ÀÚÁÖ Áß¿äÇÏ°Ô µË´Ï´Ù.

ÀÌ Å¬·¡½º´Â ÇÑ ¹ø¿¡ º¹¼öÀÇ ÆÄ ¹ÌÆ®¸¦Ãëµæ ¹×Çعæ Çϱâ À§ÇÑ Æí¸®ÇÑ ¸Þ¼­µåµµ Á¦°øÇÕ´Ï´Ù. ±Õµî¼ºÀ» true ·Î ¼³Á¤ÇÏÁö ¾Ê°í ÀÌ·¯ÇÑ ¸Þ¼­µå¸¦ »ç¿ëÇÏ´Â °æ¿ì, ¹«Á¦ÇÑÇÏ°Ô ¿¬±âµÇ´Â À§ÇèÀÌ ´Ã¾î³ª´Â °Í¿¡ À¯ÀÇÇØ ÁÖ¼¼¿ä.

µµÀÔµÈ ¹öÀü :
1.5
°ü·Ã Ç׸ñ:
Á÷·ÄÈ­ µÈ Çü½Ä

»ý¼ºÀÚ °³¿ä
Semaphore (int permits)
          ÁöÁ¤µÈ ¼öÀÇ ÆÄ ¹ÌÆ® ¹× ºñ±Õµî ¼³Á¤À» »ç¿ëÇØ Semaphore¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
Semaphore (int permits, boolean fair)
          ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ® ¹× ÁöÁ¤µÈ ±Õµî ¼³Á¤À» »ç¿ëÇØ Semaphore¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
 
¸Þ¼­µå °³¿ä
 void acquire ()
          ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇØ, ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·ÏÀ» ½ÇÇàÇÕ´Ï´Ù.
 void acquire (int permits)
          ÀÌ semaphore·ÎºÎÅÍ ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇØ, ¸ðµç °ÍÀÌ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·ÏÀ» ½ÇÇàÇÕ´Ï´Ù.
 void acquireUninterruptibly ()
          ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÕ´Ï´Ù.
 void acquireUninterruptibly (int permits)
          ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÀÌ semaphore·ÎºÎÅÍ ÃëµæÇØ, ¸ðµç °ÍÀÌ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·Ï ÇÕ´Ï´Ù.
 int availablePermits ()
          ÀÌ semaphore·Î ÀÌ¿ë °¡´ÉÇÑ ÇöÀçÀÇ ÆÄ ¹ÌÆ®¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 int drainPermits ()
          °ð¹Ù·Î ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®¸¦ ¸ðµÎ ÃëµæÇØ µ¹·ÁÁØ´Ù
protected  Collection <Thread > getQueuedThreads ()
          ÃëµæÀ» ´ë±âÇÏ°í ÀÖ´Â thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù.
 int getQueueLength ()
          ÃëµæÀ» ´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean hasQueuedThreads ()
          ÃëµæÀ» ´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean isFair ()
          ÀÌ semaphore·Î ±Õµî¼ºÀÌ true ·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
protected  void reducePermits (int reduction)
          ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦, ÁöÁ¤µÈ ¼ö¸¸Å­ ÁÙÀÔ´Ï´Ù.
 void release ()
          ÆÄ ¹ÌÆ®¸¦ ÇعæÇØ semaphore¿¡ ¸®ÅÏÇÕ´Ï´Ù.
 void release (int permits)
          ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÇعæÇØ, semaphore¿¡ ¸®ÅÏÇÕ´Ï´Ù.
 String toString ()
          ÀÌ semaphore ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎÀ» ¸®ÅÏÇÕ´Ï´Ù.
 boolean tryAcquire ()
          È£Ãâ½Ã¿¡ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡°Ô¸¸, ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÕ´Ï´Ù.
 boolean tryAcquire (int permits)
          È£Ãâ½Ã·Î ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ¸ðµÎ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡°Ô¸¸, ÆÄ ¹ÌÆ®¸¦ ÀÌ semaphore·ÎºÎÅÍ ÃëµæÇÕ´Ï´Ù.
 boolean tryAcquire (int permits, long timeout, TimeUnit  unit)
          ÁöÁ¤µÈ ´ë±â ½Ã°£³»·Î ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®°¡ ¸ðµÎ ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾î, ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ±×·¯ÇÑ ÆÄ ¹ÌÆ®¸¦ ÀÌ semaphore·ÎºÎÅÍ ÃëµæÇÕ´Ï´Ù.
 boolean tryAcquire (long timeout, TimeUnit  unit)
          ÁöÁ¤µÈ ´ë±â ½Ã°£³»¿¡ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾î, ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÕ´Ï´Ù.
 
Ŭ·¡½º java.lang. Object ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼­µå
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

»ý¼ºÀÚ »ó¼¼

Semaphore

public Semaphore(int permits)
ÁöÁ¤µÈ ¼öÀÇ ÆÄ ¹ÌÆ® ¹× ºñ±Õµî ¼³Á¤À» »ç¿ëÇØ Semaphore¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
permits - »ç¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ Ãʱâ¼ö. ÀÌ°ÍÀº À߸øµÈ °ª À¸·Î ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. °ªÀÌ ºÎÀÇ °æ¿ì, ¾î´À ÃëµæÀÌ Çã°¡µÇ´Â °Íº¸´Ùµµ Àü¿¡ ÇعæÀ» ½Ç½ÃÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

Semaphore

public Semaphore(int permits,
                 boolean fair)
ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ® ¹× ÁöÁ¤µÈ ±Õµî ¼³Á¤À» »ç¿ëÇØ Semaphore¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
permits - »ç¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ Ãʱâ¼ö. ÀÌ°ÍÀº À߸øµÈ °ª À¸·Î ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. °ªÀÌ ºÎÀÇ °æ¿ì, ¾î´À ÃëµæÀÌ Çã°¡µÇ´Â °Íº¸´Ùµµ Àü¿¡ ÇعæÀ» ½Ç½ÃÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.
fair - °æÇÕÀÇ ¹ß»ý½Ã¿¡ ÀÌ semaphore°¡ ¼±ÀÔó ¹æÆíÀÇ ÆÄ ¹ÌÆ® Çã°¡¸¦ º¸ÁõÇÏ´Â °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false
¸Þ¼­µåÀÇ »ó¼¼

acquire

public void acquire()
             throws InterruptedException 
ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇØ, ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·ÏÀ» ½ÇÇàÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì´Â ±×°ÍÀ» ÃëµæÇØ Áï½Ã º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ 1°³ ÁÙÀÔ´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 2°³ Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÇöÀçÀÇ thread·Î

InterruptedExceptionÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® ½ºÅ×ÀÌÅͽº°¡ Ŭ¸®¾î µË´Ï´Ù.

¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì
°ü·Ã Ç׸ñ:
Thread.interrupt()

acquireUninterruptibly

public void acquireUninterruptibly()
ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÕ´Ï´Ù. ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·ÏÀ» ½ÇÇàÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì´Â ±×°ÍÀ» ÃëµæÇØ Áï½Ã º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ 1°³ ÁÙÀÔ´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´Ù¸¥ thread°¡ ÀÌ semaphore¿¡ ´ëÇؼ­ release() ¸Þ¼­µå¸¦ È£ÃâÇØ, ´ÙÀ½¿¡ ÆÄ ¹ÌÆ®¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´Â °ÍÀÌ ÇöÀçÀÇ thread°¡ µÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®ÀÇ ´ë±âÁß¿¡ ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì, ´ë±â´Â ¼ÓÇàµË´Ï´Ù¸¸, thread°¡ ÆÄ ¹ÌÆ®¸¦ ÇÒ´çÇÒ ¼ö ÀÖÀ» ¶§´Â ÆÄ ¹ÌÆ®·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´ø °æ¿ì¿¡ ¹ÞÀ» ¶§¿Í´Â ´Ù¸¥ °æ¿ì°¡ ÀÖ½À´Ï´Ù. thread°¡ ¸Þ¼­µå·ÎºÎÅÍ º¹±ÍÇÒ ¶§¿¡ ÀÎÅÍ·´Æ® »óÅ°¡ ¼³Á¤µË´Ï´Ù.


tryAcquire

public boolean tryAcquire()
È£Ãâ½Ã¿¡ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡°Ô¸¸, ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì´Â ±×°ÍÀ» ÃëµæÇØ, °ª true·Î Áï½Ã º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ 1°³ ÁÙÀÔ´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÀÌ ¸Þ¼­µå´Â °ª false·Î Áï½Ã º¹±ÍÇÕ´Ï´Ù.

ÀÌ semaphore°¡ ±Õµî ¼ø¼­ºÎ Á¤Ã¥¸¦ »ç¿ëÇϵµ·Ï ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì¿¡¼­µµ, ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇϸé, ´Ù¸¥ thread°¡ ÇöÀç, ´ë±âÁßÀÏÁö ¾î¶³Áö¿¡ °ü°è¾øÀÌ, tryAcquire() È£Ãâ¿¡ ÀÇÇØ Áï½Ã ±×°ÍÀ» ÃëµæÇÕ´Ï´Ù. ÀÌ ¡¸¹Ù¡¡¹µ¿ÀÛÀº ±Õµî¼ºÀ» ÇØÄ£´Ù°í Çصµ, ƯÁ¤ÀÇ »óȲÀ¸·Î À¯¿ëÇÑ °ÍÀÌ µË´Ï´Ù. ±Õµî ¼³Á¤À» Áß½ÃÇÏ´Â °æ¿ì, °ÅÀÇ µî°¡ÀÎ tryAcquire(0, TimeUnit.SECONDS) ¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä (À̰͵µ ÀÎÅÍ·´Æ®¸¦ °ËÃâÇÑ´Ù).

¹Ýȯ°ª:
ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ¾úÀ» °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false

tryAcquire

public boolean tryAcquire(long timeout,
                          TimeUnit  unit)
                   throws InterruptedException 
ÁöÁ¤µÈ ´ë±â ½Ã°£³»¿¡ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾î, ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ÀÌ semaphore·ÎºÎÅÍ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì´Â ±×°ÍÀ» ÃëµæÇØ, °ª true·Î Áï½Ã º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ 1°³ ÁÙÀÔ´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 3 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ¸é, °ª true°¡ ¸®Åϵ˴ϴ٠.

ÇöÀçÀÇ thread·Î

InterruptedExceptionÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® ½ºÅ×ÀÌÅͽº°¡ Ŭ¸®¾î µË´Ï´Ù.

ÁöÁ¤µÈ ´ë±â ½Ã°£ÀÌ °æ°úÇϸé, °ª false°¡ ¸®Åϵ˴ϴ٠. ½Ã°£ÀÌ Á¦·Î ¶Ç´Â ±×°Íº¸´Ù ÀÛÀº °æ¿ì, ¸Þ¼­µå´Â ´ë±âÇÏÁö ¾Ê½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
timeout - ÆÄ ¹ÌÆ®ÀÇ ÃÖÀå ´ë±â ½Ã°£
unit - timeout ÀμöÀÇ ½Ã°£ ´ÜÀ§
¹Ýȯ°ª:
ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ¾úÀ» °æ¿ì´Â true, ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ±â Àü¿¡ ´ë±â ½Ã°£ÀÌ °æ°úÇßÀ» °æ¿ì´Â false
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì
°ü·Ã Ç׸ñ:
Thread.interrupt()

release

public void release()
ÆÄ ¹ÌÆ®¸¦ ÇعæÇØ semaphore¿¡ ¸®ÅÏÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÇعæÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ 1 ´Ã¸³´Ï´Ù. ¸î°³ÀÇ thread°¡ ÆÄ ¹ÌÆ®ÀÇ ÃëµæÀ» ½ÃµµÇÏ´Â °æ¿ì, ±×°ÍÀÌ ¼±ÅõǾî ÇعæµÈÁö ¾ó¸¶ ¾ÈµÈ ÆÄ ¹ÌÆ®°¡ ÁÖ¾îÁý´Ï´Ù. ±× thread´Â thread ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ÀçÂ÷ À¯È¿ÇÏ°Ô µË´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÇعæÇÏ´Â thread°¡acquire()¸¦ È£ÃâÇØ ÆÄ ¹ÌÆ®¸¦ ÃëµæÀÌ ³¡³­ »óÅÂÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. semaphoreÀÇ ÀûÁ¤ÇÑ »ç¿ë¹ýÀº ¾îÇø®ÄÉÀ̼ÇÀÇ ÇÁ·Î±×·¡¹Ö ±Ô¾à¿¡ ÀÇÇØ È®¸³µË´Ï´Ù.


acquire

public void acquire(int permits)
             throws InterruptedException 
ÀÌ semaphore·ÎºÎÅÍ ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÃëµæÇØ, ¸ðµç °ÍÀÌ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·ÏÀ» ½ÇÇàÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÕ´Ï´Ù.

ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡ ±×°ÍÀ» ÃëµæÇØ, Áï½Ã º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ ÁöÁ¤¼ö¸¸Å­ ÁÙÀÔ´Ï´Ù.

ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö°¡ ºÎÁ·ÇÑ °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 2°³ Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÇöÀçÀÇ thread·Î

InterruptedExceptionÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® »óÅ°¡ Ŭ¸®¾î µË´Ï´Ù. ÀÌ thread¿¡ ÇÒ´çÇÒ ¼ö ÀÖ¾î¾ßÇÒ ÆÄ ¹ÌÆ®´Â release() È£Ãâ·Î ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾ú´ÂÁö¿Í °°ÀÌ, ÆÄ ¹ÌÆ®ÀÇ ÃëµæÀ» ½ÃµµÇÏ´Â ´Ù¸¥ thread¿¡ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
permits - ¾ò´Â ÆÄ ¹ÌÆ®ÀÇ ¼ö
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì
IllegalArgumentException - ÆÄ ¹ÌÆ®°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì
°ü·Ã Ç׸ñ:
Thread.interrupt()

acquireUninterruptibly

public void acquireUninterruptibly(int permits)
ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÀÌ semaphore·ÎºÎÅÍ ÃëµæÇØ, ¸ðµç °ÍÀÌ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ºí·Ï ÇÕ´Ï´Ù.

ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡ ±×°ÍÀ» ÃëµæÇØ, Áï½Ã º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ ÁöÁ¤¼ö¸¸Å­ ÁÙÀÔ´Ï´Ù.

ÃæºÐÇÑ ¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µË´Ï´Ù. ±× ÈÄ, ´Ù¸¥ thread°¡ ÀÌ semaphore¿¡ ´ëÇؼ­ release ¸Þ¼­µåÀÇ ¾î´ÀÂÊÀ̵çÀ» È£ÃâÇØ, ´ÙÀ½¹ø ÆÄ ¹ÌÆ®¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´Â °ÍÀÌ ÇöÀçÀÇ thread·Î ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö°¡ ÀÌ ¿ä±¸¸¦ ä¿ï ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®ÀÇ ´ë±âÁß¿¡ ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â °æ¿ì, ´ë±â´Â °è¼ÓµÇ¾î Å¥³»ÀÇ À§Ä¡´Â ¿µÇâÀ» ¹ÞÁö ¾Ê½À´Ï´Ù. thread°¡ ÀÌ ¸Þ¼­µå·ÎºÎÅÍ º¹±ÍÇÒ ¶§, ÀÎÅÍ·´Æ® »óÅ°¡ ¼³Á¤µË´Ï´Ù.

ÆĶó¹ÌÅÍ:
permits - ¾ò´Â ÆÄ ¹ÌÆ®ÀÇ ¼ö
¿¹¿Ü:
IllegalArgumentException - ÆÄ ¹ÌÆ®°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì

tryAcquire

public boolean tryAcquire(int permits)
È£Ãâ½Ã·Î ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ¸ðµÎ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡°Ô¸¸, ÆÄ ¹ÌÆ®¸¦ ÀÌ semaphore·ÎºÎÅÍ ÃëµæÇÕ´Ï´Ù.

ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡ ±×°ÍÀ» ÃëµæÇØ, Áï½Ã true·Î º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ ÁöÁ¤¼ö¸¸Å­ ÁÙÀÔ´Ï´Ù.

ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö°¡ ºÒÃæºÐÇÑ °æ¿ì, ÀÌ ¸Þ¼­µå´Â °ª false·Î Áï½Ã º¹±ÍÇÕ´Ï´Ù. ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö´Â º¯È­ÇÏÁö ¾Ê½À´Ï´Ù.

ÀÌ semaphore°¡ ±Õµî ¼ø¼­ºÎ Á¤Ã¥¸¦ »ç¿ëÇϵµ·Ï ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì¿¡¼­µµ, ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇϸé, ´Ù¸¥ thread°¡ ´ë±âÁßÀÏÁö ¾î¶³Áö¿¡ °ü°è¾øÀÌ, tryAcquire È£Ãâ¿¡ ÀÇÇØ Áï½Ã ±×°ÍÀ» ÃëµæÇÕ´Ï´Ù. ÀÌ ¡¸¹Ù¡¡¹µ¿ÀÛÀº ±Õµî¼ºÀ» ÇØÄ£´Ù°í Çصµ, ƯÁ¤ÀÇ »óȲÀ¸·Î À¯¿ëÇÑ °ÍÀÌ µË´Ï´Ù. ±Õµî ¼³Á¤À» Áß½ÃÇÏ´Â °æ¿ì, °ÅÀÇ µî°¡ÀÎ tryAcquire(permits, 0, TimeUnit.SECONDS) ¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä (À̰͵µ ÀÎÅÍ·´Æ®¸¦ °ËÃâÇÑ´Ù).

ÆĶó¹ÌÅÍ:
permits - ¾ò´Â ÆÄ ¹ÌÆ®ÀÇ ¼ö
¹Ýȯ°ª:
ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ¾úÀ» °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false
¿¹¿Ü:
IllegalArgumentException - ÆÄ ¹ÌÆ®°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì

tryAcquire

public boolean tryAcquire(int permits,
                          long timeout,
                          TimeUnit  unit)
                   throws InterruptedException 
ÁöÁ¤µÈ ´ë±â ½Ã°£³»·Î ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®°¡ ¸ðµÎ ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾î, ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ±×·¯ÇÑ ÆÄ ¹ÌÆ®¸¦ ÀÌ semaphore·ÎºÎÅÍ ÃëµæÇÕ´Ï´Ù.

ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡ ±×°ÍÀ» ÃëµæÇØ, Áï½Ã °ª true·Î º¹±ÍÇØ, ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦ ÁöÁ¤¼ö¸¸Å­ ÁÙÀÔ´Ï´Ù.

ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö°¡ ºÎÁ·ÇÑ °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 3 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ¸é, °ª true°¡ ¸®Åϵ˴ϴ٠.

ÇöÀçÀÇ thread·Î

InterruptedExceptionÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® »óÅ°¡ Ŭ¸®¾î µË´Ï´Ù. ÀÌ thread¿¡ ÇÒ´çÇÒ ¼ö ÀÖ¾î¾ßÇÒ ÆÄ ¹ÌÆ®´Â release() È£Ãâ·Î ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾ú´ÂÁö¿Í °°ÀÌ, ÆÄ ¹ÌÆ®ÀÇ ÃëµæÀ» ½ÃµµÇÏ´Â ´Ù¸¥ thread¿¡ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÁöÁ¤µÈ ´ë±â ½Ã°£ÀÌ °æ°úÇϸé, °ª false°¡ ¸®Åϵ˴ϴ٠. ½Ã°£ÀÌ Á¦·Î ¾Æ·¡ÀÇ °æ¿ì, ¸Þ¼­µå´Â ´ë±âÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ thread¿¡ ÇÒ´çÇÒ ¼ö ÀÖ¾î¾ßÇÒ ÆÄ ¹ÌÆ®´Â ¸ðµÎ, release() È£Ãâ¿¡ ÀÇÇØ ÀÌ¿ë °¡´ÉÇÏ°Ô µÇ¾ú´ÂÁö¿Í °°ÀÌ, ÆÄ ¹ÌÆ®ÀÇ ÃëµæÀ» ½ÃµµÇÏ´Â ´Ù¸¥ thread¿¡ ´ë½ÅÇØ¿¡ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
permits - ¾ò´Â ÆÄ ¹ÌÆ®ÀÇ ¼ö
timeout - ÆÄ ¹ÌÆ®ÀÇ ÃÖÀå ´ë±â ½Ã°£
unit - timeout ÀμöÀÇ ½Ã°£ ´ÜÀ§
¹Ýȯ°ª:
¸ðµç ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ¾úÀ» °æ¿ì´Â true, ¸ðµç ÆÄ ¹ÌÆ®°¡ ÃëµæµÇ±â Àü¿¡ ´ë±â ½Ã°£ÀÌ °æ°úÇßÀ» °æ¿ì´Â false
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì
IllegalArgumentException - ÆÄ ¹ÌÆ®°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì
°ü·Ã Ç׸ñ:
Thread.interrupt()

release

public void release(int permits)
ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÇعæÇØ, semaphore¿¡ ¸®ÅÏÇÕ´Ï´Ù.

ÁöÁ¤¼öÀÇ ÆÄ ¹ÌÆ®¸¦ ÇعæÇØ, ±× ¼ö¸¸Å­ ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®¸¦ ´Ã¸³´Ï´Ù. ÆÄ ¹ÌÆ®ÀÇ ÃëµæÀ» ½ÃµµÇÏ´Â ÀÓÀÇÀÇ thread°¡ ÀÖ´Â °æ¿ì, ±× Áß 1°³ÀÇ thread°¡ ¼±ÅõǾî ÇعæµÈÁö ¾ó¸¶ ¾ÈµÈ ÆÄ ¹ÌÆ®°¡ ÁÖ¾îÁý´Ï´Ù. threadÀÇ ¿ä±¸¸¦ ä¿ì´Â ¼öÀÇ ÆÄ ¹ÌÆ®°¡ ÀÖ´Â °æ¿ì, ±× thread´Â threadÀÇ ½ºÄÉÁÙ»óÀÇ ¸ñÀûÀ» À¯È¿ (ÀçÀ¯È¿)·Î ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì, thread´Â ÃæºÐÇÑ ¼öÀÇ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù. ÀÌ threadÀÇ ¿ä±¸°¡ ä¿öÁø ´ÙÀ½¿¡µµ ¾ÆÁ÷ ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®°¡ ³²¾Æ ÀÖ´Â °æ¿ì, À̹øÀº ÆÄ ¹ÌÆ®ÀÇ ÃëµæÀ» ½ÃµµÇÏ´Â ´Ù¸¥ thread¿¡ ÀÌ·¯ÇÑ ÆÄ ¹ÌÆ®¸¦ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆÄ ¹ÌÆ®¸¦ ÇعæÇÏ´Â thread°¡acquire¸¦ È£ÃâÇØ ÆÄ ¹ÌÆ®¸¦ ÃëµæÀÌ ³¡³­ »óÅÂÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. semaphoreÀÇ ÀûÁ¤ÇÑ »ç¿ë¹ýÀº ¾îÇø®ÄÉÀ̼ÇÀÇ ÇÁ·Î±×·¡¹Ö ±Ô¾à¿¡ ÀÇÇØ È®¸³µË´Ï´Ù.

ÆĶó¹ÌÅÍ:
permits - ÇعæÇÏ´Â ÆÄ ¹ÌÆ®ÀÇ ¼ö
¿¹¿Ü:
IllegalArgumentException - ÆÄ ¹ÌÆ®°¡ Á¦·Î ¹Ì¸¸ÀÇ °æ¿ì

availablePermits

public int availablePermits()
ÀÌ semaphore·Î ÀÌ¿ë °¡´ÉÇÑ ÇöÀçÀÇ ÆÄ ¹ÌÆ®¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.

º¸Åë, ÀÌ ¸Þ¼­µå´Â µð¹ö±× ¹× Å×½ºÆ® ¸ñÀûÀ¸·Î »ç¿ëÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÀÌ semaphore·Î ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö

drainPermits

public int drainPermits()
°ð¹Ù·Î ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®¸¦ ¸ðµÎ ÃëµæÇØ µ¹·ÁÁØ´Ù

¹Ýȯ°ª:
ÆÄ ¹ÌÆ®ÀÇ ¼ö

reducePermits

protected void reducePermits(int reduction)
ÀÌ¿ë °¡´ÉÇÑ ÆÄ ¹ÌÆ®ÀÇ ¼ö¸¦, ÁöÁ¤µÈ ¼ö¸¸Å­ ÁÙÀÔ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â semaphore¸¦ »ç¿ëÇØ ÀÌ¿ë ºÒ°¡°¡ µÈ ÀÚ¿øÀ» ÃßÀûÇÏ´Â ¼­ºê Ŭ·¡½º¿¡¼­ À¯¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏ°Ô µÉ ¶§±îÁöÀÇ ´ë±â¸¦ ºí·Ï ÇÏÁö ¾Ê´Â´Ù°í ÇÏ´Â Á¡À¸·Î½á, acquire¿Í ´Ù¸¨´Ï´Ù.

ÆĶó¹ÌÅÍ:
reduction - »èÁ¦ÇÏ´Â ÆÄ ¹ÌÆ®ÀÇ ¼ö
¿¹¿Ü:
IllegalArgumentException - ÁÙÀÌ´Â ¼ö°¡ ºÎÀÇ °æ¿ì

isFair

public boolean isFair()
ÀÌ semaphore·Î ±Õµî¼ºÀÌ true ·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÀÌ semaphore·Î ±Õµî¼ºÀÌ true ·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì´Â true

hasQueuedThreads

public final boolean hasQueuedThreads()
ÃëµæÀ» ´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. Ãë¼Ò´Â ¾ðÁ¦¶óµµ ¹ß»ýÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ true°¡ µ¹·ÁÁÖ°íÁ®µµ, ´Ù¸¥ ¸î°³ÀÇ thread°¡ ¾ò´Â °ÍÀº º¸ÁõµÇÁö ¾Ê½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ÁÖ·Î ½Ã½ºÅÛ »óÅÂÀÇ °¨½Ã¿¡ »ç¿ëÇÏ´Â ¸ñÀûÀ¸·Î ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ ´Ù¸¥ thread°¡ Á¸ÀçÇÒ °¡´É¼ºÀÌ ÀÖ´Â °æ¿ì´Â true

getQueueLength

public final int getQueueLength()
ÃëµæÀ» ´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå°¡ ³»ºÎÀÇ µ¥ÀÌÅÍ ±¸Á¶¸¦ traversal ÇÏ°í ÀÖ´Â µ¿¾È¿¡µµ, thread¼ö°¡ µ¿ÀûÀ¸·Î º¯È­ÇÏ´Â °æ¿ì°¡ Àֱ⠶§¹®¿¡ ÀÌ °ªÀº ÃßÁ¤¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â µ¿±âÀÇ Á¦¾î¿ëÀº ¾Æ´Ï°í, ½Ã½ºÅÛ »óŸ¦ °¨½ÃÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù.

¹Ýȯ°ª:
ÀÌ ¶ôÀ» ´ë±âÇÏ°í ÀÖ´Â threadÀÇ ÃßÁ¤¼ö

getQueuedThreads

protected Collection <Thread > getQueuedThreads()
ÃëµæÀ» ´ë±âÇÏ°í ÀÖ´Â thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù. ½ÇÁ¦ÀÇ thread ¼¼Æ®´Â °á°úÀÇ ±¸ÃàÁß¿¡µµ µ¿ÀûÀ¸·Î º¯È­ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ ¸®ÅÏµÈ Ä÷º¼ÇÀº ÃÖ¼±ÀÌ ³ë·ÂÇÑ ´ÙÀ½ÀÇ ÃßÁ¤¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. ¸®ÅÏµÈ Ä÷º¼ÇÀÇ ¿ä¼Ò¿¡´Â ƯÁ¤ÀÇ ¼ø¼­´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â º¸´Ù Æ÷°ýÀûÀÎ °¨½Ã ±â´ÉÀ» Á¦°øÇÏ´Â ¼­ºê Ŭ·¡½ºÀÇ ±¸ÃàÀ» ¿ëÀÌÇÏ°Ô ÇÏ´Â ¸ñÀûÀ¸·Î ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
threadÀÇ Ä÷º¼Ç

toString

public String  toString()
ÀÌ semaphore ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎÀ» ¸®ÅÏÇÕ´Ï´Ù. »óÅ´ °ýÈ£·Î µÑ·¯½Î¿© ij¸¯ÅÍ ¶óÀÎ ¡¸Permits =¡¹¿¡ À̾î ÆÄ ¹ÌÆ®ÀÇ ¼ö°¡ ÁöÁ¤µË´Ï´Ù.

¿À¹ö¶óÀ̵å(override):
Ŭ·¡½º Object ³»ÀÇ toString
¹Ýȯ°ª:
ÀÌ semaphore ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎ

JavaTM 2 Platform
Standard Ed. 5.0

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