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 °¡ ¹ß»ý µË´Ï´Ù.

µµÀÔµÈ ¹öÀü :
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ÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå°¡ ³»ºÎÀÇ µ¥ÀÌÅÍ ±¸Á¶¸¦ traversal ÇÏ°í ÀÖ´Â µ¿¾È¿¡µµ, 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 µµ ÂüÁ¶ÇϽʽÿÀ.