JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent.locks
Ŭ·¡½º ReentrantReadWriteLock

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

public class ReentrantReadWriteLock
extends Object
implements ReadWriteLock, Serializable

ReentrantLock ¿Í À¯»çÇÑ ½Ã¸àƽ½º¸¦ Áö¿øÇÏ´Â ReadWriteLock ±¸Çö.

ÀÌ Å¬·¡½º¿¡´Â ´ÙÀ½ÀÇ ÇÁ·ÎÆÛƼ°¡ ÀÖ½À´Ï´Ù.

ÀÌ Å¬·¡½ºÀÇ Á÷·ÄÈ­´Â ºôÆ®ÀÎ ¶ô°ú °°°Ô µ¿ÀÛÇÕ´Ï´Ù. Á÷·ÄÈ­ ÇØÁ¦µÈ ¶ôÀº, Á÷·ÄÈ­½Ã »óÅ¿¡ °ü°è¾øÀÌ, ¶ô ÇØÁ¦ »óŰ¡ µË´Ï´Ù.

»ç¿ë·Ê£º Â÷ÀÇ Äڵ忹¿¡¼­´Â ÀçÀÔ°¡´É¼ºÀ» Ȱ¿ëÇØ, ij½¬ÀÇ °»½Å ÈÄ¿¡ ¶ôÀÇ °ÝÇϸ¦ ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù (°£·«È­Çϱâ À§Çؼ­ ¿¹¿Ü 󸮴 »ý·« µÇ°í ÀÖ´Ù).


 class CachedData {
   Object data;
   volatile boolean cacheValid;
   ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

   void processCachedData() {
     rwl.readLock(). lock();
     if (! cacheValid) {
        // upgrade lock manually
        rwl.readLock(). unlock();   // must unlock first to obtain writelock
        rwl.writeLock(). lock();
        if (! cacheValid) { // recheck
          data = ...
          cacheValid = true;
        }
        // downgrade lock
        rwl.readLock(). lock();  // reacquire read without giving up write lock
        rwl.writeLock(). unlock(); // unlock write, still hold read
     }

     use(data);
     rwl.readLock(). unlock();
   }
 }
 
ReentrantReadWriteLocks¸¦ »ç¿ëÇØ, ¾î¶² Á¾·ùÀÇ Collections »ç¿ëÀ¸·Î º´Ç༺À» °³¼±ÇÒ ¼ö ÀÖ½À´Ï´Ù. º¸Åë , À̰ÍÀÌ °¡Ä¡°¡ ÀÖ´Â °ÍÀº, Ä÷º¼ÇÀÌ ´ë±Ô¸ð·Î µÇ´Â °ÍÀÌ ¿¹»óµÇ¾î ¶óÀÌÅÍ threadº¸´Ù ´Ù¼öÀÇ ¸®´õ thread¿¡ ÇØ ¾×¼¼½º µÇ¾î µ¿±â¿¡ ÇÑ ¿À¹öÇìµå¸¦ ¿ôµµ´Â ¿À¹öÇìµå¸¦ °¡Áö´Â Á¶ÀÛÀÌ Æ÷ÇԵǴ °æ¿ìÀÔ´Ï´Ù. ¿¹·Î¼­ ´ë±Ô¸ð¿©, µ¿½Ã ¾×¼¼½º°¡ ¿¹»óµÇ´Â TreeMap¸¦ »ç¿ëÇϴ Ŭ·¡½º¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

 class RWDictionary {
    private final Map<String, Data>  m = new TreeMap<String, Data>();
    private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
    private final Lock r = rwl.readLock();
    private final Lock w = rwl.writeLock();

    public Data get(String key) {
        r.lock(); try { return m.get(key); } finally { r.unlock(); }
    }
    public String[] allKeys() {
        r.lock(); try { return m.keySet(). toArray(); } finally { r.unlock(); }
    }
    public Data put(String key, Data value) {
        w.lock(); try { return m.put(key, value); } finally { w.unlock(); }
    }
    public void clear() {
        w.lock(); try { m.clear(); } finally { w.unlock(); }
    }
 }
 

±¸Çö»óÀÇ ÁÖÀÇ:

ÀçÀÔ °¡´ÉÇÑ ±âÀÔ ¶ôÀº, ¼ÒÀ¯ÀÚ¸¦ º»·¡ Á¤ÀÇÇØ¼­, ¶ôÀ» ÇØ¹æÇÒ ¼ö ÀÖ´Â °ÍÀº ÃëµæÇÑ thread¸¸ÀÔ´Ï´Ù. ´ëÁ¶ÀûÀ¸·Î ÀÌ ±¸Çö¿¡¼­´Â read ¶ô¿¡ ¼ÒÀ¯±ÇÀ̶ó°í ÇÏ´Â °³³äÀº Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡ read ¶ôÀ» ÇØ¹æÇÏ´Â thread°¡ ±×°ÍÀ» ¾ò´Â thread¿Í °°Áö ¾ÊÀ¸¸é ¾È µÈ´Ù°í ÇÏ´Â °ÍÀº ¾ø½À´Ï´Ù. ´Ù¸¸, ÀÌ ÇÁ·ÎÆÛƼ´Â ÀÌ Å¬·¡½ºÀÇ Àå·¡ÀÇ ±¸ÇöÀ¸·Î º¸°ü À¯ÁöµÇ´Â °ÍÀº º¸ÁõµÇ°í ÀÖÁö ¾Ê½À´Ï´Ù.

ÀÌ ¶ôÀº, ÃÖ´ë 65536 Àç±ÍÀû ±âÀÔ ¶ô ¹× 65536 read ¶ôÀ» ¼­Æ÷Æ®ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Á¦ÇÑÀ» ³ÑÀ¸·Á°í Çϸé, Àá±×´Â ¸Þ¼­µå·ÎºÎÅÍ Error °¡ Throw µË´Ï´Ù.

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

Áßø(Nested) Ŭ·¡½º °³¿ä
static class ReentrantReadWriteLock.ReadLock
          readLock() ¸Þ¼­µå¿¡ ÇØ µ¹·ÁÁÖ°íÁö´Â ¶ô
static class ReentrantReadWriteLock.WriteLock
          writeLock() ¸Þ¼­µå¿¡ ÇØ µ¹·ÁÁÖ°íÁö´Â ¶ô
 
»ý¼ºÀÚ °³¿ä
ReentrantReadWriteLock ()
          µðÆúÆ®ÀÇ ¼ø¼­ ÇÁ·ÎÆÛƼ·Î »õ·Î¿î ReentrantReadWriteLock¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
ReentrantReadWriteLock (boolean fair)
          ÁöÁ¤µÈ ±Õµî¼º Æú¸®½Ã¸¦ »ç¿ëÇØ, »õ·Î¿î ReentrantReadWriteLock¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
 
¸Þ¼­µå °³¿ä
protected  Thread getOwner ()
          ÇöÀç ±âÀÔ ¶ôÀ» ¼ÒÀ¯Çϰí ÀÖ´Â thread¸¦ µ¹·ÁÁÝ´Ï´Ù.
protected  Collection <Thread > getQueuedReaderThreads ()
          read ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» µ¹·ÁÁÝ´Ï´Ù.
protected  Collection <Thread > getQueuedThreads ()
          read ¶ô ¶Ç´Â ±âÀÔÇØ ¶ôÀÇ ¸î°³ÀÇ ÃëµæÀ» ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» µ¹·ÁÁÝ´Ï´Ù.
protected  Collection <Thread > getQueuedWriterThreads ()
          ±âÀÔ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» µ¹·ÁÁÝ´Ï´Ù.
 int getQueueLength ()
          read ¶ô ¶Ç´Â ±âÀÔÇØ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù.
 int getReadLockCount ()
          ÀÌ ¶ô¿ëÀ¸·Î º¸°ü À¯ÁöµÇ°í ÀÖ´Â read ¶ôÀÇ ¼ö¸¦ Á¶È¸ÇÕ´Ï´Ù.
protected  Collection <Thread > getWaitingThreads (Condition  condition)
          ±âÀÔ ¶ô¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ÁöÁ¤ »óŸ¦ ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» µ¹·ÁÁÝ´Ï´Ù.
 int getWaitQueueLength (Condition  condition)
          ±âÀÔ ¶ô¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ÁöÁ¤ »óÅ·Π´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù.
 int getWriteHoldCount ()
          ÇöÀçÀÇ thread¿¡ ÇÑ, ÀÌ ¶ô»óÀÇ ÀçÀÔ °¡´ÉÇÑ ±âÀÔ º¸°ü À¯Áö¼ö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean hasQueuedThread (Thread  thread)
          read ¶ô ¶Ç´Â ±âÀÔÇØ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ ÁöÁ¤ÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean hasQueuedThreads ()
          read ¶ô ¶Ç´Â ±âÀÔÇØ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean hasWaiters (Condition  condition)
          ÀÌ ±âÀÔ ¶ô¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ÁöÁ¤ »óÅ·Π´ë±âÇϰí ÀÖ´Â thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean isFair ()
          ÀÌ ¶ôÀ¸·Î ±Õµî¼ºÀÌ true ·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì´Â true¸¦ µ¹·ÁÁÝ´Ï´Ù.
 boolean isWriteLocked ()
          ±âÀÔ ¶ôÀÌ thread¿¡ º¸°ü À¯ÁöµÇ°í ÀÖ´ÂÁö ¾î¶²Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean isWriteLockedByCurrentThread ()
          ÇöÀçÀÇ thread°¡ ÀÌ ±âÀÔ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖ´Â Á¦¹ßÀ» Á¶È¸ÇÕ´Ï´Ù.
 ReentrantReadWriteLock.ReadLock readLock ()
          Àоîµé¿©¿¡ »ç¿ëÇÏ´Â ¶ôÀ» µ¹·ÁÁÝ´Ï´Ù.
 String toString ()
          ÀÌ ¶ô ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎÀ» µ¹·ÁÁÝ´Ï´Ù.
 ReentrantReadWriteLock.WriteLock writeLock ()
          ±âÀÔÇØ¿¡ »ç¿ëÇÏ´Â ¶ôÀ» µ¹·ÁÁÝ´Ï´Ù.
 
Ŭ·¡½º java.lang. Object ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼­µå
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

»ý¼ºÀÚ »ó¼¼

ReentrantReadWriteLock

public ReentrantReadWriteLock()
µðÆúÆ®ÀÇ ¼ø¼­ ÇÁ·ÎÆÛƼ·Î »õ·Î¿î ReentrantReadWriteLock¸¦ ÀÛ¼ºÇÕ´Ï´Ù.


ReentrantReadWriteLock

public ReentrantReadWriteLock(boolean fair)
ÁöÁ¤µÈ ±Õµî¼º Æú¸®½Ã¸¦ »ç¿ëÇØ, »õ·Î¿î ReentrantReadWriteLock¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

ÆÄ¶ó¹ÌÅÍ:
fair - ÀÌ ¶ôÀÌ ±Õµî ¼ø¼­ºÎ Æú¸®½Ã¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â true
¸Þ¼­µåÀÇ »ó¼¼

writeLock

public ReentrantReadWriteLock.WriteLock  writeLock()
ÀÎÅÍÆäÀ̽º ReadWriteLock ±â¼ú:
±âÀÔÇØ¿¡ »ç¿ëÇÏ´Â ¶ôÀ» µ¹·ÁÁÝ´Ï´Ù.

Á¤ÀÇ:
ÀÎÅÍÆäÀ̽º ReadWriteLock ³»ÀÇ writeLock
¹Ýȯ°ª:
±âÀÔÇØ¿¡ »ç¿ëÇÏ´Â ¶ô

readLock

public ReentrantReadWriteLock.ReadLock  readLock()
ÀÎÅÍÆäÀ̽º ReadWriteLock ±â¼ú:
Àоîµé¿©¿¡ »ç¿ëÇÏ´Â ¶ôÀ» µ¹·ÁÁÝ´Ï´Ù.

Á¤ÀÇ:
ÀÎÅÍÆäÀ̽º ReadWriteLock ³»ÀÇ readLock
¹Ýȯ°ª:
Àоîµé¿©¿¡ »ç¿ëÇÏ´Â ¶ô

isFair

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

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

getOwner

protected Thread  getOwner()
ÇöÀç ±âÀÔ ¶ôÀ» ¼ÒÀ¯Çϰí ÀÖ´Â thread¸¦ µ¹·ÁÁÝ´Ï´Ù. ¶ôÀÌ ¼ÒÀ¯µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì´Â null¸¦ µ¹·ÁÁÝ´Ï´Ù. ¶ôÀÇ ÃëµæÀ» ½ÃµµÇϰí ÀÖ¾î ¾ÆÁ÷ ÃëµæÇϰí ÀÖÁö ¾Ê´Â thread°¡ Á¸ÀçÇÏ´Â °æ¿ìµµ, ¼ÒÀ¯ÀÚ´Â ÀϽÃÀûÀ¸·Î null °¡ µÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â º¸´Ù Æ÷°ýÀûÀÎ ¶ô °¨½Ã ±â´ÉÀ» Á¦°øÇÏ´Â ¼­ºê Ŭ·¡½ºÀÇ ±¸ÃàÀ» ¿ëÀÌÇÏ°Ô ÇÏ´Â ¸ñÀûÀ¸·Î ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
¼ÒÀ¯ÀÚ. ¼ÒÀ¯µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì´Â null

getReadLockCount

public int getReadLockCount()
ÀÌ ¶ô¿ëÀ¸·Î º¸°ü À¯ÁöµÇ°í ÀÖ´Â read ¶ôÀÇ ¼ö¸¦ Á¶È¸ÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â µ¿±âÀÇ Á¦¾î¿ëÀ¸·Î¼­°¡ ¾Æ´Ï°í, ½Ã½ºÅÛ »óÅÂÀÇ °¨½Ã¿ëÀ¸·Î¼­ ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
º¸°ü À¯ÁöÇÏ´Â read ¶ôÀÇ ¼ö

isWriteLocked

public boolean isWriteLocked()
±âÀÔ ¶ôÀÌ thread¿¡ º¸°ü À¯ÁöµÇ°í ÀÖ´ÂÁö ¾î¶²Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â µ¿±âÀÇ Á¦¾î¿ëÀ¸·Î¼­°¡ ¾Æ´Ï°í, ½Ã½ºÅÛ »óÅÂÀÇ °¨½Ã¿ëÀ¸·Î¼­ ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
¸î°³ÀÇ thread°¡ ±âÀÔÇØ ¶ôÀ» º¸°ü À¯ÁöÇÏ´Â °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false

isWriteLockedByCurrentThread

public boolean isWriteLockedByCurrentThread()
ÇöÀçÀÇ thread°¡ ÀÌ ±âÀÔ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖ´Â Á¦¹ßÀ» Á¶È¸ÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÇöÀçÀÇ thread°¡ ±âÀÔÇØ ¶ôÀ» º¸°ü À¯ÁöÇÏ´Â °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false

getWriteHoldCount

public int getWriteHoldCount()
ÇöÀçÀÇ thread¿¡ ÇÑ, ÀÌ ¶ô»óÀÇ ÀçÀÔ °¡´ÉÇÑ ±âÀÔ º¸°ü À¯Áö¼ö¸¦ Á¶È¸ÇÕ´Ï´Ù. ¶óÀÌÅÍ thread´Â ¶ô ÇØÁ¦ ¾×¼Ç°ú ÀÏÄ¡ÇÏÁö ¾Ê´Â °¢ ¶ô ¾×¼Ç¿ëÀÇ ¶ôÀ» º¸°ü À¯ÁöÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÇöÀçÀÇ threadÀÇ, ±âÀÔ ¶ô¿¡ ´ëÇÑ º¸°ü À¯Áö¼ö. ÇöÀçÀÇ thread°¡ ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì´Â Á¦·Î

getQueuedWriterThreads

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

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

getQueuedReaderThreads

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

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

hasQueuedThreads

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

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

hasQueuedThread

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

ÆÄ¶ó¹ÌÅÍ:
thread - thread
¹Ýȯ°ª:
ÁöÁ¤µÈ thread°¡ Å¥¿¡ ³Ö¾îÁö°í ÀÖ¾î ÀÌ ¶ôÀ» ´ë±âÁßÀÎ °æ¿ì´Â true
¿¹¿Ü:
NullPointerException - thread°¡ null °æ¿ì

getQueueLength

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

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

getQueuedThreads

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

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

hasWaiters

public boolean hasWaiters(Condition  condition)
ÀÌ ±âÀÔ ¶ô¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ÁöÁ¤ »óÅ·Π´ë±âÇϰí ÀÖ´Â thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. ŸÀÓ ¾Æ¿ô ¹× ÀÎÅÍ·´Æ®´Â ¾ðÁ¦¶óµµ ¹ß»ýÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ true °¡ µ¹·ÁÁÖ°íÁ®µµ, Àå·¡ signal °¡ thread¸¦ ½ÃÀÛ½ÃŰ´Â °ÍÀº º¸ÁõµÇ°í ÀÖÁö ¾Ê½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ÁÖ·Î ½Ã½ºÅÛ »óÅÂÀÇ °¨½Ã¿¡ »ç¿ëÇÏ´Â ¸ñÀûÀ¸·Î ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

ÆÄ¶ó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÏ´Â °æ¿ì´Â true
¿¹¿Ü:
IllegalMonitorStateException - ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì
IllegalArgumentException - ÁöÁ¤µÈ »óŰ¡ ÀÌ ¶ô°ú °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException - »óŰ¡ null °æ¿ì

getWaitQueueLength

public int getWaitQueueLength(Condition  condition)
±âÀÔ ¶ô¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ÁöÁ¤ »óÅ·Π´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù. ŸÀÓ ¾Æ¿ô ¹× ÀÎÅÍ·´Æ®ÀÇ ¹ß»ýÇÒ °¡´É¼ºÀº ¾ðÁ¦¶óµµ Á¸ÀçÇϱâ À§ÇØ, ÃßÁ¤¼ö´Â ½ÇÁ¦ÀÇ ´ë±âÀÚ¼ö¿¡ °üÇÑ »óÇÑÀ» ³ªÅ¸³»´Â¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â µ¿±âÀÇ Á¦¾î¿ëÀ¸·Î¼­°¡ ¾Æ´Ï°í, ½Ã½ºÅÛ »óÅÂÀÇ °¨½Ã¿ëÀ¸·Î¼­ ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

ÆÄ¶ó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö
¿¹¿Ü:
IllegalMonitorStateException - ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì
IllegalArgumentException - ÁöÁ¤µÈ »óŰ¡ ÀÌ ¶ô°ú °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException - »óŰ¡ null °æ¿ì

getWaitingThreads

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

ÆÄ¶ó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
threadÀÇ Ä÷º¼Ç
¿¹¿Ü:
IllegalMonitorStateException - ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì
IllegalArgumentException - ÁöÁ¤µÈ »óŰ¡ ÀÌ ¶ô°ú °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException - »óŰ¡ null °æ¿ì

toString

public String  toString()
ÀÌ ¶ô ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎÀ» µ¹·ÁÁÝ´Ï´Ù. »óÅ´ °ýÈ£·Î µÑ·¯½Î¿© ij¸¯ÅÍ ¶óÀÎ ¡¸Write locks =¡¹¿¡ À̾î ÀçÀÔ°¡´É¼ºÀ» º¸°ü À¯ÁöÇÏ´Â ±âÀÔ ¶ôÀÇ ¼ö ¹× ij¸¯ÅÍ ¶óÀÎ ¡¸Read locks =¡¹¿¡ ÀÌ¾î º¸°ü À¯ÁöµÇ´Â read ¶ôÀÇ ¼ö°¡ Æ÷ÇԵ˴ϴÙ.

¿À¹ö¶óÀ̵å(override):
Ŭ·¡½º Object ³»ÀÇ toString
¹Ýȯ°ª:
ÀÌ ¶ô ¹× ±× »óŸ¦ ½Äº°Çϴ 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 µµ ÂüÁ¶ÇϽʽÿÀ.