JavaTM 2 Platform
Standard Ed. 5.0

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

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

public abstract class AbstractQueuedSynchronizer
extends Object
implements Serializable

ºí·Ï ¶ô ¹× ¼±ÀÔó ¹æÆí (FIFO) ´ë±â Å¥¿¡ ÀÇÁ¸µÈ °ü·Ã µ¿±âÈ­ ÀåÄ¡ (semaphore, À̺¥Æ®µî)¸¦ ±¸ÇöÇϴ üÁ¦¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ Å¬·¡½º´Â »óÅ ǥÇöÀ» ´ÜÀÏÀÇ ¿øÀÚ int Ä¡¿¡ ÀÇÁ¸µÈ ´ëºÎºÐÀÇ Á¾·ùÀÇ µ¿±âÈ­ ÀåÄ¡ÀÇ À¯¿ëÇÑ ±â¹ÝÀ¸·Î¼­ ¼³°èµÇ°í ÀÖ½À´Ï´Ù. ¼­ºê Ŭ·¡½º´Â ÀÌ »óŸ¦ º¯°æÇÏ´Â protected ¸Þ¼­µå¸¦ Á¤ÀÇÇÒ ÇÊ¿ä°¡ ÀÖ¾î, ±× ¸Þ¼­µå´Â Ãëµæ ¶Ç´Â ÇعæÁßÀÇ °´Ã¼¸¦ »ç¿ëÇØ »óÅÂÀÇ ¹Ì¸¦ Á¤ÀÇÇÕ´Ï´Ù. À̰͵éÀÌ ÁöÁ¤µÇ¸é, ÀÌ Å¬·¡½º³»ÀÇ ´Ù¸¥ ¸Þ¼­µå´Â ¸ðµç Å¥ ¹× ºí·Ï µµ±¸¸¦ °¡µ¿½Ãŵ´Ï´Ù. ¼­ºê Ŭ·¡½º´Â ´Ù¸¥ »óÅ Çʵ带 À¯ÁöÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, µ¿±â¿¡ °üÇÑ ÃßÀûÀ» ½Ç½ÃÇÒ ¼ö ÀÖ´Â °ÍÀº getState(), setState(int) ¹× compareAndSetState(int, int) ¸Þ¼­µå¸¦ »ç¿ëÇØ Á¶ÀÛµÇ¾î ¿øÀÚÀûÀ¸·Î °»½ÅµÈ int Ä¡ »ÓÀÔ´Ï´Ù.

¼­ºê Ŭ·¡½º´Â public°¡ ¾Æ´Ñ ³»ºÎ ÇïÆÛ Å¬·¡½º·Î¼­ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ÀÌ°ÍÀº ±×°ÍÀ» µÑ·¯½Î´Â Ŭ·¡½ºÀÇ µ¿±â ÇÁ·ÎÆÛƼÀÇ ±¸Çö¿¡ »ç¿ëµË´Ï´Ù. AbstractQueuedSynchronizer Ŭ·¡½º´Â µ¿±â ÀÎÅÍÆäÀ̽º¸¦ ÀÏÀý ±¸ÇöÇÏÁö ¾Ê½À´Ï´Ù. ±× ´ë½ÅÇØ, ±¸»ó ¶ô ¹× °ü·ÃµÈ µ¿±âÈ­ ÀåÄ¡¿¡ ÀÇÇØ Àû´ç È£ÃâÇØ public ¸Þ¼­µå¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Â acquireInterruptibly(int) µîÀÇ ¸Þ¼­µå¸¦ Á¤ÀÇÇÕ´Ï´Ù.

ÀÌ Å¬·¡½º´Â µðÆúÆ®ÀÇ ¡¸¹èŸ¡¹¸ðµå ¹× ¡¸°øÀ¯¡¹¸ðµåÀÇ ¾ðÁ¨°¡ ¶Ç´Â ¾çÂÊ ¸ðµÎ¸¦ Áö¿ø ÇÕ´Ï´Ù. ¹èŸ ¸ðµå·Î ÃëµæµÇ¸é, ´Ù¸¥ thread°¡ ÃëµæÀ» ½ÃµµÇصµ ¼º°øÇÏÁö ¾Ê½À´Ï´Ù. °øÀ¯ ¸ðµå¿¡¼­´Â º¹¼öÀÇ thread¿¡ ÇÑ ÃëµæÀÌ °¡´ÉÇÕ´Ï´Ù (´Ù¸¸, ¹Ýµå½Ã ÃëµæÀÌ ¼º°øÇÒ ÇÊ¿ä°¡ ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù). ÀÌ Å¬·¡½º´Â °øÀ¯ ¸ðµåÀÇ ÃëµæÀÌ ¼º°øÇßÀ» °æ¿ì, ´ë±âÁßÀÇ ´ÙÀ½ÀÇ thread (Á¸ÀçÇÏ´Â °æ¿ì)µµ Ãëµæ °¡´ÉÇÑ°¡ ¾î¶²°¡¸¦ ÆǺ°ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù°í ÇÏ´Â µµ±¸ ÀûÀÎ ¹Ì¸¦ Á¦¿ÜÇØ, ÀÌ·¯ÇÑ Â÷À̸¦ ¡¸Àνġ¹ÇÏÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ ¸ðµå·Î ´ë±âÁßÀÇ thread´Â °°Àº FIFO Å¥¸¦ °øÀ¯ÇÕ´Ï´Ù. º¸Åë, ±¸Çö ¼­ºê Ŭ·¡½º´Â ÀÌ·¯ÇÑ ¸ðµåÀÇ 1°³ ¸¸À» Áö¿ø ÇÕ´Ï´Ù¸¸, ReadWriteLock µî¿¡¼­´Â ¾çÂÊ ¸ðµÎ°¡ ±â´ÉÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ¹èŸ ¸ðµå ¶Ç´Â °øÀ¯ ¸ðµå¸¸À» Áö¿øÇÏ´Â ¼­ºê Ŭ·¡½º´Â »ç¿ëÇÏÁö ¾Ê´Â ¸ðµå¸¦ Áö¿øÇÏ´Â ¸Þ¼­µå¸¦ Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

ÀÌ Å¬·¡½º´Â ¹èŸ ¸ðµå¸¦ Áö¿øÇÏ´Â ¼­ºê Ŭ·¡½º¿¡ ÀÇÇØ Condition ±¸ÇöÀ¸·Î¼­ »ç¿ë °¡´ÉÇÑ, »óÀÚ·Î µÈ AbstractQueuedSynchronizer.ConditionObject Ŭ·¡½º¸¦ Á¤ÀÇÇÕ´Ï´Ù. isHeldExclusively() ´Â ÀÌ Å¬·¡½º¿¡ °ü°èµÇ¾î, µ¿±â°¡ ÇöÀçÀÇ thread¿¡ °üÇؼ­ ¹èŸÀûÀ¸·Î º¸°ü À¯ÁöµÇ´ÂÁö, ÇöÀçÀÇ getState() Ä¡¸¦ »ç¿ëÇØ ºÒ·Á °£ release(int) ¸Þ¼­µå°¡ ÀÌ °´Ã¼¸¦ ¿ÏÀüÇÏ°Ô ÇعæÇÏ´ÂÁö, ÀÌ º¸Á¸ÀÌ ³¡³­ »óÅ°ªÀÌ ÁöÁ¤µÇ¸é acquire(int) °¡ ÃÖÁ¾ÀûÀ¸·Î ÀÌ °´Ã¼¸¦ ÀÌÀü¿¡ ÃëµæµÈ »óÅ¿¡ º¹¿øÇÏ´ÂÁö¸¦ ¸®Æ÷Æ®ÇÕ´Ï´Ù. ±× ÀÌ¿Ü¿¡¼­´Â AbstractQueuedSynchronizer ¸Þ¼­µå´Â ÀÌ »óŸ¦ ÀÛ¼ºÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ Á¦ÇÑÀ» ä¿ï ¼ö°¡ ¾ø´Â °æ¿ì´Â »ç¿ëÇÏÁö ¸»¾Æ ÁÖ¼¼¿ä. ´ç¿¬ÇÑ ÀÏÀÔ´Ï´Ù¸¸, AbstractQueuedSynchronizer.ConditionObject µ¿ÀÛÀº µ¿±âÈ­ ÀåÄ¡ ±¸ÇöÀÇ ½Ã¸àƽ½º¿¡ ÀÇÁ¸ÇÕ´Ï´Ù.

ÀÌ Å¬·¡½º´Â ³»ºÎ Å¥ÀÇ °ËÁõ, ÆÄ¾Ç ¹× °¨½Ã¿ë ¸Þ¼­µå ¹× »óÅ °´Ã¼¿ëÀÇ À¯»ç ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. À̰͵éÀº ÇÊ¿äÇÏ°Ô ÀÀÇØ µ¿±âµµ±¸ ÀÇ AbstractQueuedSynchronizer¸¦ »ç¿ëÇØ Å¬·¡½º³»¿¡ export ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ Å¬·¡½º¸¦ Á÷·ÄÈ­Çϸé, ±âº»À¸·Î µÇ´Â ¿øÀÚ Á¤¼öÀÇ º¸¼ö »óŸ¸ÀÌ Æ÷ÇԵDZ⠶§¹®¿¡ Á÷·ÄÈ­ º¹¿øµÈ °´Ã¼´Â ºñ¾îÀÖ´Â thread Å¥¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù. Á÷·ÄÈ­ ±â´ÉÀ» ÇÊ¿ä·Î ÇÏ´Â º¸Åë ÀÇ ¼­ºê Ŭ·¡½º´Â Á÷·ÄÈ­ º¹¿ø½Ã¿¡ ÀÌ°ÍÀ» ±âÁ¸ÀÇ Ãʱ⠻óÅ¿¡ º¹¿øÇÏ´Â readObject ¸Þ¼­µå¸¦ Á¤ÀÇÇÕ´Ï´Ù.

»ç¿ë¹ý

ÀÌ Å¬·¡½º¸¦ µ¿±âÈ­ ÀåÄ¡ÀÇ º£À̽º·Î¼­ »ç¿ëÇÏ·Á¸é, Àû¿ë °¡´ÉÇϸé getState(), setState(int), compareAndSetState(int, int)¸¦ »ç¿ëÇØ µ¿±â »óÅÂÀÇ °ËÁõÀ̳ª º¯°æÀ» ½Ç½ÃÇÏ´Â °ÍÀ¸·Î ´ÙÀ½ÀÇ ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÕ´Ï´Ù.

ÀÌ·¯ÇÑ °¢ ¸Þ¼­µå´Â µðÆúÆ®·Î UnsupportedOperationException¸¦ Throw ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸Þ¼­µåÀÇ ±¸ÇöÀº ³»ºÎ°¡ thread ¼¼ÀÌÇÁ°¡ ¾Æ´Ï¸é ¾ÈµÇ¾î, ¶Ç, ÀϹÝÀûÀ¸·Î ª°í ÇÑÆí ºí·ÎÅ·¾øÀÌ ¾øÀ¸¸é ¾ÈµË´Ï´Ù. ÀÌ·¯ÇÑ ¸Þ¼­µåÀÇ Á¤ÀÇ´Â ÀÌ Å¬·¡½ºÀÇ Áö¿ø µÇ´Â À¯ÀÏÇÑ »ç¿ë ¹æ¹ýÀÔ´Ï´Ù. ´Ù¸¥ ¸Þ¼­µå´Â ¸ðµÎ, °³º°ÀûÀ¸·Î º¯°æÇÒ ¼ö ¾ø±â ¶§¹®¿¡ final ¶ó°í ¼±¾ðµË´Ï´Ù.

ÀÌ Å¬·¡½º´Â ³»ºÎÀÇ FIFO Å¥¿¡ ±Ù°ÅÇÑ´Ù°í´Â Çصµ, ÀÚµ¿ÀûÀ¸·Î FIFO Ãëµæ Á¤Ã¥°¡ Àû¿ëµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ¹èŸÀûÀÎ µ¿±âÀÇ ÄÚ¾î´Â ´ÙÀ½ÀÇ Çü½ÄÀÌ µË´Ï´Ù.


Acquire:
while (! tryAcquire(arg)) {
enqueue thread if it is not already queued;
possibly block current thread;
}

Release:
if (tryRelease(arg))
unblock the first queued thread;
(°øÀ¯ ¸ðµåµµ ºñ½ÁÇÏÁö¸¸, cascade ½ÅÈ£°¡ °ü°èµÈÀÎ °æ¿ì°¡ ÀÖ´Ù)

ÃëµæÀÇ Ã¼Å©´Â Å¥¿¡ ³Ö¾îÁö±â Àü¿¡ ºÒ·Á°¡ ¹Ç·Î »õ·Ó°Ô ÃëµæµÇ´Â thread´Â ºí·Ï ¹× Å¥¿¡ ³Ö¾îÁö´Â ´Ù¸¥ threadº¸´Ù ¸ÕÀú ¡¸È­¹° ¿î¹Ý¼± ÇÑ´Ù¡¹ÀÏÀÌ °¡´ÉÇÕ´Ï´Ù. ´Ù¸¸, ÇÊ¿äÇϸé, tryAcquire À̳ª tryAcquireShared¸¦ Á¤ÀÇÇØ, 1°³ ÀÌ»óÀÇ °ËÁõ ¸Þ¼­µå¸¦ ³»ºÎ¿¡¼­ È£ÃâÇÏ´Â °ÍÀ¸·Î È­¹° ¿î¹Ý¼±À» ¹«È¿·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷, ¾ö¹ÐÇÑ FIFO ¶ôÀº tryAcquire¸¦ Á¤ÀÇÇØ, getFirstQueuedThread() °¡ ÇöÀçÀÇ thread¸¦ µ¹·ÁÁÖÁö ¾Ê´Â °æ¿ì¿¡ Áï½Ã false¸¦ µ¹·ÁÁÖ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. º¸Åë ¹Ù¶÷Á÷ÇÑ ºñ¾ö¹ÐÇØ ÆíÇâÀÌ ¾ø´Â ¹öÀüÀº, hasQueuedThreads() °¡ true¸¦ µ¹·ÁÁÖ°í, getFirstQueuedThread°¡ ÇöÀçÀÇ thread°¡ ¾Æ´Ñ (Áï getFirstQueuedThread°¡ null ¿¡¼­µµ ÇöÀçÀÇ threadµµ ¾Æ´Ï´Ù) °æ¿ì¿¡°Ô¸¸, Áï½Ã false¸¦ µ¹·ÁÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù. »õ·Î¿î ¹Ù¸®¿¡À̼ÇÀÌ °¡´ÉÇÕ´Ï´Ù.

º¸Åë, throughput¿Í ½ºÄÉÀ̶óºñ¸®Æ¼´Â µðÆúÆ®ÀÇ È­¹° ¿î¹Ý¼± ( ¡¸Å½¿å¡¹, ¡¸¹æÆó¡¹, ¡¸È£¼Û ȸÇÇ¡¹¶ó°íµµ ºÒ¸°´Ù) ½ºÆ®·¡ÅÍÁöÀÇ ÃÖ»óÁ¤µµ¿¡ À§Ä¡ÇÕ´Ï´Ù. ÀÌ°ÍÀÌ ÆíÇâÀÌ ¾ø°í, °í°¥ÇÏÁö ¾Ê´Â °ÍÀº º¸ÁõµË´Ï´Ù¸¸, ¸ÕÀú Å¥¿¡ ³Ö¾îÁø thread´Â ³ªÁß¿¡ Å¥¿¡ ³Ö¾îÁö´Â threadº¸´Ù Àü¿¡ Àç°æÇÕÀÌ Çã°¡µÇ¾î °¢ Àç°æÇÕÀº Âø½ÅÇÏ´Â thread¿¡ ´ëÇؼ­ ¼º°øÇÏ´Â °øÆòÇÑ ±âȸ¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù. ¶Ç, ÃëµæÀº º¸Åë ÀûÀÎ ¹Ì¿¡¼­´Â ¡¸½ºÇÉ¡¹ÇÏÁö ¾Ê½À´Ï´Ù¸¸, ºí·ÎÅ·Àü¿¡ ´Ù¸¥ °è»ê¿¡ »ðÀÔµÈ tryAcquire º¹¼öÀÇ È£ÃâÀ» ½ÇÇà °¡´ÉÇÕ´Ï´Ù. ÀÌ°Í¿¡ ÀÇÇØ ¹èŸÀûÀÎ µ¿±â°¡ ´Ü±âÀûÀ¸·Î º¸°ü À¯ÁöµÉ »ÓÀÇ °æ¿ì, ½ºÇÉÀÇ ÇýÅÃÀÇ ´ëºÎºÐÀ» Çâ¼öÇÒ ¼ö ÀÖ½À´Ï´Ù. °Ô´Ù°¡ ¹èŸÀûÀÎ µ¿±â°¡ º¸°ü À¯ÁöµÇÁö ¾Ê´Â °æ¿ì¿¡´Â °ÅÀÇ ºÎ´ã¾øÀÌ, ±× ÇýÅÃÀ» Çâ¼öÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÊ¿äÇÏ°Ô ÀÀÇØ ¡¸Áö¸§±æ¡¹Ã¼Å©¸¦ °¡Áö´Â ¸Þ¼­µå¸¦ ¾ò´Â È£ÃâÀ» ¾ÕµÎ°í ¹èÄ¡ÇÏ´Â °ÍÀ¸·Î ÀÌ °ªÀ» ´Ã¸± ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº µ¿±âÈ­ Àå°ªÀÌ °æÇÕ ÇÒ °¡´É¼ºÀÌ ÀûÀº °æ¿ì, hasContended() ³ª hasQueuedThreads()¸¦ »çÀü¿¡ üũÇÏ´Â µî ¹æ¹ýÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ Å¬·¡½º´Â »ç¿ë ¹üÀ§¸¦ int »óÅÂ, ÆĶó¹ÌÅÍÀÇ Ãëµæ°ú ÇØ¹æ ¹× ³»ºÎ FIFO ´ë±â Å¥¿¡ Á¸ °¡´ÉÇÑ µ¿±âÈ­ ÀåÄ¡·Î ÇÑÁ¤ÇÏ´Â °ÍÀ¸·Î È¿À²ÀûÀ¸·Î È®À强ÀÇ ³ôÀº µ¿±â ±â¹ÝÀÇ ÀϺθ¦ Á¦°øÇÕ´Ï´Ù. ÀÌ°ÍÀÌ¶óµµ ÃæºÐÇÏÁö ¾Ê´Â °æ¿ì, atomic Ŭ·¡½º, µ¶ÀÚÀûÀÎ Ä¿½ºÅÒ Queue Ŭ·¡½º ¹× LockSupport ºí·Ï Áö¿ø¸¦ »ç¿ëÇØ, µ¿±âÈ­ ÀåÄ¡¸¦ Àú·¹º§·ÎºÎÅÍ ±¸ÃàÇÒ ¼ö ÀÖ½À´Ï´Ù.

»ç¿ë¿¹

ÀÌÇÏ¿¡ °ªÁ¦·Î¸¦ »ç¿ëÇØ ¶ô ÇØÁ¦ »óÅ ¹× ¶ô »óŸ¦ ³ªÅ¸³»´Â ÀçÀÔ ºÒ°¡´ÉÇÑ »óÈ£ ¹èŸ ¶ô Ŭ·¡½º¸¦ ³ªÅ¸³À´Ï´Ù. ÀÌ°ÍÀº »óÅÂÀÇ Áö¿ø ¹× ¸î°³ÀÇ ÆÄ¾Ç ¸Þ¼­µåÀÇ °ø°³µµ ½Ç½ÃÇÕ´Ï´Ù.


class Mutex implements Lock, java.io.Serializable {

// Our internal helper class
private static class Sync extends AbstractQueuedSynchronizer {
// Report whether in locked state
    protected boolean isHeldExclusively() { 
return getState() == 1; 
}

// Acquire the lock if state is zero
public boolean tryAcquire(int acquires) {
assert acquires == 1; // Otherwise unused
return compareAndSetState(0, 1);
}

// Release the lock by setting state to zero
protected boolean tryRelease(int releases) {
assert releases == 1; // Otherwise unused
if (getState() == 0) throw new IllegalMonitorStateException();
setState(0);
return true;
}

// Provide a Condition
Condition newCondition() { return new ConditionObject(); }

// Deserialize properly
private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
s.defaultReadObject();
setState(0); // reset to unlocked state
}
}

// The sync object does all the hard work.  We just forward to it.
private final Sync sync = new Sync();

public void lock()                { sync.acquire(1); }
public boolean tryLock()          { return sync.tryAcquire(1); }
public void unlock()              { sync.release(1); }
public Condition newCondition()   { return sync.newCondition(); }
public boolean isLocked()         { return sync.isHeldExclusively(); }
public boolean hasQueuedThreads() { return sync.hasQueuedThreads(); }
public void lockInterruptibly() throws InterruptedException { 
sync.acquireInterruptibly(1);
}
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException {
return sync.tryAcquireNanos(1, unit.toNanos(timeout));
}
}

ÀÌÇÏ¿¡ ½ÃÀÛ¿¡ ´ÜÀÏÀÇ signal¸¦ ÇÊ¿ä·Î ÇÏ´Â °ÍÀ» Á¦¿ÜÇØ, CountDownLatch Ŭ·¡½º¿¡ À¯»çÇÑ ºøÀå Ŭ·¡½º¸¦ ³ªÅ¸³À´Ï´Ù. ºøÀåÀº ºñ¹èŸÀûÀ̱⠶§¹®¿¡ shared Ãëµæ ¹× ÇØ¹æ ¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù.


class BooleanLatch {

private static class Sync extends AbstractQueuedSynchronizer {
boolean isSignalled() { return getState() ! = 0; }

protected int tryAcquireShared(int ignore) {
return isSignalled()?  1 : -1;
}

protected boolean tryReleaseShared(int ignore) {
setState(1);
return true;
}
}

private final Sync sync = new Sync();
public boolean isSignalled() { return sync.isSignalled(); }
public void signal()         { sync.releaseShared(1); }
public void await() throws InterruptedException {
sync.acquireSharedInterruptibly(1);
}
}

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

Áßø(Nested) Ŭ·¡½º °³¿ä
 class AbstractQueuedSynchronizer.ConditionObject
          Lock ±¸ÇöÀÇ ±â¹ÝÀ¸·Î¼­ ±â´ÉÇÏ´Â AbstractQueuedSynchronizer »óÅ ±¸Çö ÀÌ Å¬·¡½ºÀÇ ¸Þ¼­µå ¹®¼­¿¡´Â Lock ¹× Condition »ç¿ëÀÚ ·ÎºÎÅÍ º» µ¿ÀÛ »ç¾çÀº ¾Æ´Ï°í, ³»ºÎ µµ±¸°¡ ±âÀçµÇ¾î ÀÖ½À´Ï´Ù.
 
»ý¼ºÀÚ °³¿ä
protected AbstractQueuedSynchronizer ()
          Á¦·ÎÀÇ Ãʱ⠵¿±â »óŸ¦ »ç¿ëÇØ, »õ·Î¿î AbstractQueuedSynchronizer ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
 
¸Þ¼­µå °³¿ä
 void acquire (int arg)
          ÀÎÅÍ·´Æ®¸¦ ¹«½ÃÇØ, ¹èŸ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù.
 void acquireInterruptibly (int arg)
          ¹èŸ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù.
 void acquireShared (int arg)
          ÀÎÅÍ·´Æ®¸¦ ¹«½ÃÇØ, °øÀ¯ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù.
 void acquireSharedInterruptibly (int arg)
          °øÀ¯ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù.
protected  boolean compareAndSetState (int expect, int update)
          ÇöÀç »óÅ°ªÀÌ ¿¹»óµÇ´Â °ª¿¡ µ¿ÀÏÇÑ °æ¿ì, µ¿±â »óÅ°¡ ÁöÁ¤µÈ °»½ÅÄ¡¿¡ ¿øÀÚÀûÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù.
 Collection <Thread > getExclusiveQueuedThreads ()
          ¹èŸ ¸ðµå·Î ÃëµæÇϱâ À§Çؼ­ ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù.
 Thread getFirstQueuedThread ()
          Å¥³»ÀÇ ÃÖÃÊÀÇ (´ë±â ½Ã°£ÀÇ °¡Àå ±æ´Ù) thread¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 Collection <Thread > getQueuedThreads ()
          ÃëµæÀ» ´ë±âÇÏ°í ÀÖ´Â thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù.
 int getQueueLength ()
          ÃëµæÀ» ´ë±âÇÏ°í ÀÖ´Â threadÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 Collection <Thread > getSharedQueuedThreads ()
          °øÀ¯ ¸ðµå·Î ÃëµæÇϱâ À§Çؼ­ ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù.
protected  int getState ()
          µ¿±â »óÅÂÀÇ ÇöÀç »óŸ¦ ¸®ÅÏÇÕ´Ï´Ù.
 Collection <Thread > getWaitingThreads (AbstractQueuedSynchronizer.ConditionObject  condition)
          ÀÌ µ¿±âÈ­ ÀåÄ¡¿¡ °ü·ÃµÈ ÁöÁ¤ »óÅ·Π´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù.
 int getWaitQueueLength (AbstractQueuedSynchronizer.ConditionObject  condition)
          ÀÌ µ¿±âÈ­ ÀåÄ¡¿¡ °ü·ÃµÈ ÁöÁ¤ »óÅ·Π´ë±âÇÏ°í ÀÖ´Â threadÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean hasContended ()
          ÀÌ µ¿±âÈ­ ÀåÄ¡ÀÇ ÃëµæÀ¸·Î °æÇÕ ÇÏ°í ÀÖ´Â thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö (Áï, acquire ¸Þ¼­µå°¡ ºí·Ï µÇ¾ú´ÂÁö ¾î¶°Çß´ÂÁö)¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean hasQueuedThreads ()
          ÃëµæÀ» ´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean hasWaiters (AbstractQueuedSynchronizer.ConditionObject  condition)
          ÀÌ µ¿±âÈ­ ÀåÄ¡¿¡ °ü·ÃµÈ ÁöÁ¤ »óÅ·Π´ë±âÇÏ°í ÀÖ´Â thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
protected  boolean isHeldExclusively ()
          ÇöÀçÀÇ (È£ÃâÃøÀÇ) thread¿¡ °üÇؼ­, µ¿±â°¡ ¹èŸÀûÀ¸·Î ÇàÇØÁö´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean isQueued (Thread  thread)
          ÁöÁ¤µÈ thread°¡ ÇöÀç, Å¥¿¡ ³Ö¾îÁö°í ÀÖ´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean owns (AbstractQueuedSynchronizer.ConditionObject  condition)
          ÁöÁ¤µÈ ConditionObject°¡ ÀÌ µ¿±âÈ­ ÀåÄ¡¸¦ ¶ôÀ¸·Î¼­ »ç¿ëÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.
 boolean release (int arg)
          ¹èŸ ¸ðµå·Î ÇعæÇÕ´Ï´Ù.
 boolean releaseShared (int arg)
          °øÀ¯ ¸ðµå·Î ÇعæÇÕ´Ï´Ù.
protected  void setState (int newState)
          µ¿±â »óÅÂÀÇ °ªÀ» ¼³Á¤ÇÕ´Ï´Ù.
 String toString ()
          µ¿±âÈ­ ÀåÄ¡ ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎÀ» ¸®ÅÏÇÕ´Ï´Ù.
protected  boolean tryAcquire (int arg)
          ¹èŸ ¸ðµå¿¡¼­ÀÇ ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù.
 boolean tryAcquireNanos (int arg, long nanosTimeout)
          ¹èŸ ¸ðµå·Î ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù.
protected  int tryAcquireShared (int arg)
          °øÀ¯ ¸ðµå¿¡¼­ÀÇ ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù.
 boolean tryAcquireSharedNanos (int arg, long nanosTimeout)
          °øÀ¯ ¸ðµå·Î ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù.
protected  boolean tryRelease (int arg)
          ¹èŸ ¸ðµå¿¡¼­ÀÇ ÇعæÀ» ¹Ý¿µÇϵµ·Ï, »óÅÂÀÇ ¼³Á¤À» ½ÃµµÇÕ´Ï´Ù.
protected  boolean tryReleaseShared (int arg)
          °øÀ¯ ¸ðµå¿¡¼­ÀÇ ÇعæÀ» ¹Ý¿µÇϵµ·Ï, »óÅÂÀÇ ¼³Á¤À» ½ÃµµÇÕ´Ï´Ù.
 
Ŭ·¡½º java.lang. Object ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼­µå
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

»ý¼ºÀÚ »ó¼¼

AbstractQueuedSynchronizer

protected AbstractQueuedSynchronizer()
Á¦·ÎÀÇ Ãʱ⠵¿±â »óŸ¦ »ç¿ëÇØ, »õ·Î¿î AbstractQueuedSynchronizer ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

¸Þ¼­µåÀÇ »ó¼¼

getState

protected final int getState()
µ¿±â »óÅÂÀÇ ÇöÀç»óÅ ¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ Á¶ÀÛÀº, volatile ÀÐÀ» memory semantics¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.

¹Ýȯ°ª:
ÇöÀç »óÅÂÄ¡

setState

protected final void setState(int newState)
µ¿±â »óÅÂÀÇ °ªÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÌ Á¶ÀÛÀº, volatile Ãâ·ÂÀÇ memory semantics¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
newState - »õ·Î¿î »óÅÂÄ¡

compareAndSetState

protected final boolean compareAndSetState(int expect,
                                           int update)
ÇöÀç »óÅ°ªÀÌ ¿¹»óµÇ´Â °ª¿¡ µ¿ÀÏÇÑ °æ¿ì, µ¿±â »óÅ°¡ ÁöÁ¤µÈ °»½ÅÄ¡¿¡ ¿øÀÚÀûÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ Á¶ÀÛÀº, volatile read ¹× Ãâ·ÂÀÇ memory semantics¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
expect - ¿¹»óµÇ´Â °ª
update - »õ·Î¿î °ª
¹Ýȯ°ª:
¼º°øÇÏ´Â °æ¿ì´Â true. false´Â ½ÇÁ¦ÀÇ °ªÀÌ ¿¹»óµÇ´Â °ª°ú µî°¡°¡ ¾Æ´Ñ °ÍÀ» ³ªÅ¸³½´Ù

tryAcquire

protected boolean tryAcquire(int arg)
¹èŸ ¸ðµå¿¡¼­ÀÇ ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â °´Ã¼°¡ ¹èŸ ¸ðµå¿¡¼­ÀÇ ÃëµæÀ» Çã°¡ÇÏ´Â »óÅ¿¡ ÀÖÀ»Áö ¾î¶³Áö¸¦ Á¶È¸ÇØ, Çã°¡ÇÏ´Â »óÅ¿¡ ÀÖÀ¸¸é ÃëµæÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â Ç×»ó ÃëµæÀ» ½ÇÇàÇÏ´Â thread¿¡ ÀÇÇØ È£ÃâÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå°¡ ½ÇÆи¦ ¸®Æ÷Æ®ÇØ, ÇÑÆí thread°¡ Å¥¿¡ ³Ö¾îÁöÁö ¾ÊÀº °æ¿ì, Ãëµæ ¸Þ¼­µå´Â ´Ù¸¥ thread·ÎºÎÅÍÀÇ Çع濡 ÀÇÇØ ½ÅÈ£°¡ ¼Û½ÅµÉ ¶§±îÁö ±× thread¸¦ Å¥¿¡ ³ÖÀ» ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº, Lock.tryLock() ¸Þ¼­µåÀÇ ±¸Çö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

µðÆúÆ® ±¸ÇöÀº, UnsupportedOperationException¸¦ Throw ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº Ç×»ó acquire ¸Þ¼­µå¿¡°Ô °Ç³×Áö´Â °ª, ¶Ç´Â »óÅ ´ë±â¿¡ÀÇ ¿£Æ®¸®·Î º¸Á¸µÇ´Â °ªÀÌ µÈ´Ù. ±× ¿ÜÀÇ °æ¿ì, ÀÌ °ªÀº ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¹Ýȯ°ª:
¼º°øÇÏ´Â °æ¿ì´Â true. ¼º°ø½Ã¿¡´Â ÀÌ °´Ã¼´Â ÃëµæÀÌ ³¡³­ »óÅÂÀÌ´Ù
¿¹¿Ü:
IllegalMonitorStateException - Ãëµæ¿¡ÀÇÇØ ÀÌ µ¿±âÈ­ Àå°ªÀÌ ºÎÁ¤ÇÑ »óÅ¿¡ ³õ¿©Áö´Â °æ¿ì. µ¿±â°¡ ¿Ã¹Ù¸£°Ô ±â´ÉÇϱâ À§Çؼ­´Â ÀÌ ¿¹¿Ü¸¦ ÀÏ°üÇÑ ¹æ½Ä¿¡¼­ Throw ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù
UnsupportedOperationException - ¹èŸ ¸ðµå°¡ Áö¿ø µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì

tryRelease

protected boolean tryRelease(int arg)
¹èŸ ¸ðµå¿¡¼­ÀÇ ÇعæÀ» ¹Ý¿µÇϵµ·Ï, »óÅÂÀÇ ¼³Á¤À» ½ÃµµÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â ÇعæÀ» ½ÇÇàÇÏ´Â thread¿¡ ÀÇÇØ Ç×»ó È£ÃâÇÕ´Ï´Ù.

µðÆúÆ® ±¸ÇöÀº, UnsupportedOperationException¸¦ Throw ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - release Àμö. ÀÌ °ªÀº Ç×»ó release ¸Þ¼­µå¿¡°Ô °Ç³×Áö´Â °ª, ¶Ç´Â »óÅ ´ë±â¿¡ÀÇ ¿£Æ®¸®¿¡¼­ÀÇ ÇöÀç »óÅ°ªÀÌ µÈ´Ù. ±× ¿ÜÀÇ °æ¿ì, ÀÌ °ªÀº ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¹Ýȯ°ª:
´ë±âÁßÀÇ ÀÓÀÇÀÇ thread°¡ ÃëµæÀ» ½ÃµµÇÒ ¼ö°¡ ÀÖµµ·Ï, ÀÌ °´Ã¼°¡ ¿ÏÀüÇÏ°Ô ÇعæµÈ »óÅ¿¡ ÀÖ´Â °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false
¿¹¿Ü:
IllegalMonitorStateException - Çع濡ÀÇÇØ ÀÌ µ¿±âÈ­ Àå°ªÀÌ ºÎÁ¤ÇÑ »óÅ¿¡ ³õ¿©Áö´Â °æ¿ì. µ¿±â°¡ ¿Ã¹Ù¸£°Ô ±â´ÉÇϱâ À§Çؼ­´Â ÀÌ ¿¹¿Ü¸¦ ÀÏ°üÇÑ ¹æ½Ä¿¡¼­ Throw ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù
UnsupportedOperationException - ¹èŸ ¸ðµå°¡ Áö¿ø µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì

tryAcquireShared

protected int tryAcquireShared(int arg)
°øÀ¯ ¸ðµå¿¡¼­ÀÇ ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â °´Ã¼°¡ °øÀ¯ ¸ðµå¿¡¼­ÀÇ ÃëµæÀ» Çã°¡ÇÏ´Â »óÅ¿¡ ÀÖÀ»Áö ¾î¶³Áö¸¦ Á¶È¸ÇØ, Çã°¡ÇÏ´Â »óÅ¿¡ ÀÖÀ¸¸é ÃëµæÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â Ç×»ó ÃëµæÀ» ½ÇÇàÇÏ´Â thread¿¡ ÀÇÇØ È£ÃâÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå°¡ ½ÇÆи¦ ¸®Æ÷Æ®ÇØ, ÇÑÆí thread°¡ Å¥¿¡ ³Ö¾îÁöÁö ¾ÊÀº °æ¿ì, Ãëµæ ¸Þ¼­µå´Â ´Ù¸¥ thread·ÎºÎÅÍÀÇ Çع濡 ÀÇÇØ ½ÅÈ£°¡ ¼Û½ÅµÉ ¶§±îÁö ±× thread¸¦ Å¥¿¡ ³ÖÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.

µðÆúÆ® ±¸ÇöÀº, UnsupportedOperationException¸¦ Throw ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº Ç×»ó acquire ¸Þ¼­µå¿¡°Ô °Ç³×Áö´Â °ª, ¶Ç´Â »óÅ ´ë±â¿¡ÀÇ ¿£Æ®¸®·Î º¸Á¸µÇ´Â °ªÀÌ µÈ´Ù. ±× ¿ÜÀÇ °æ¿ì, ÀÌ °ªÀº ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¹Ýȯ°ª:
½ÇÆÐÇßÀ» °æ¿ì´Â À߸øµÈ °ª, ¹èŸÀûÀ¸·Î ¼º°øÇßÀ» °æ¿ì´Â Á¦·Î ºñ¹èŸÀûÀ¸·Î ¼º°øÇßÀ» °æ¿ì´Â Á¤ÀÇ °ª. ¾î´À °æ¿ì¿¡¼­µµ, ÈļÓÀÇ ´ë±â thread´Â °¡¿ë¼ºÀ» üũÇÒ ÇÊ¿ä°¡ ÀÖ´Ù (3 °³ÀÌ ´Ù¸¥ ¹Ýȯ°ªÀÇ Áö¿ø¿¡ ÀÇÇØ Ãëµæ¸¸ÀÌ ¶§¶§·Î ¹èŸÀûÀ¸·Î µ¿ÀÛÇÏ´Â ÄÁÅؽºÆ® ³»¿¡¼­ ÀÌ ¸Þ¼­µå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µÈ´Ù). ¼º°ø½Ã¿¡´Â ÀÌ °´Ã¼´Â ÃëµæÀÌ ³¡³­ »óÅÂÀÌ´Ù
¿¹¿Ü:
IllegalMonitorStateException - Ãëµæ¿¡ÀÇÇØ ÀÌ µ¿±âÈ­ Àå°ªÀÌ ºÎÁ¤ÇÑ »óÅ¿¡ ³õ¿©Áö´Â °æ¿ì. µ¿±â°¡ ¿Ã¹Ù¸£°Ô ±â´ÉÇϱâ À§Çؼ­´Â ÀÌ ¿¹¿Ü¸¦ ÀÏ°üÇÑ ¹æ½Ä¿¡¼­ Throw ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù
UnsupportedOperationException - °øÀ¯ ¸ðµå°¡ Áö¿ø µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì

tryReleaseShared

protected boolean tryReleaseShared(int arg)
°øÀ¯ ¸ðµå¿¡¼­ÀÇ ÇعæÀ» ¹Ý¿µÇϵµ·Ï, »óÅÂÀÇ ¼³Á¤À» ½ÃµµÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â ÇعæÀ» ½ÇÇàÇÏ´Â thread¿¡ ÀÇÇØ Ç×»ó È£ÃâÇÕ´Ï´Ù.

µðÆúÆ® ±¸ÇöÀº, UnsupportedOperationException¸¦ Throw ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - release Àμö. ÀÌ °ªÀº Ç×»ó release ¸Þ¼­µå¿¡°Ô °Ç³×Áö´Â °ª, ¶Ç´Â »óÅ ´ë±â¿¡ÀÇ ¿£Æ®¸®¿¡¼­ÀÇ ÇöÀç »óÅ°ªÀÌ µÈ´Ù. ±× ¿ÜÀÇ °æ¿ì, ÀÌ °ªÀº ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¹Ýȯ°ª:
´ë±âÁßÀÇ ÀÓÀÇÀÇ thread°¡ ÃëµæÀ» ½ÃµµÇÒ ¼ö°¡ ÀÖµµ·Ï, ÀÌ °´Ã¼°¡ ¿ÏÀüÇÏ°Ô ÇعæµÈ »óÅ¿¡ ÀÖ´Â °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false
¿¹¿Ü:
IllegalMonitorStateException - Çع濡ÀÇÇØ ÀÌ µ¿±âÈ­ Àå°ªÀÌ ºÎÁ¤ÇÑ »óÅ¿¡ ³õ¿©Áö´Â °æ¿ì. µ¿±â°¡ ¿Ã¹Ù¸£°Ô ±â´ÉÇϱâ À§Çؼ­´Â ÀÌ ¿¹¿Ü¸¦ ÀÏ°üÇÑ ¹æ½Ä¿¡¼­ Throw ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù
UnsupportedOperationException - °øÀ¯ ¸ðµå°¡ Áö¿ø µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì

isHeldExclusively

protected boolean isHeldExclusively()
ÇöÀçÀÇ (È£ÃâÃøÀÇ) thread¿¡ °üÇؼ­, µ¿±â°¡ ¹èŸÀûÀ¸·Î ÇàÇØÁö´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù. ºñ´ë±â »óÅ AbstractQueuedSynchronizer.ConditionObject ¸Þ¼­µå°¡ ºÒ·Á °¥ ¶§ ¸¶´Ù, ÀÌ ¸Þ¼­µå°¡ È£ÃâµË´Ï´Ù (´ë±â »óÅÂÀÇ ¸Þ¼­µå¿¡¼­´Â release(int) °¡ ºÒ·Á °£´Ù).

µðÆúÆ® ±¸ÇöÀº, UnsupportedOperationException¸¦ Throw ÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â AbstractQueuedSynchronizer.ConditionObject ¸Þ¼­µå·Î ³»ºÎÀû¿¡°Ô¸¸ ºÒ·Á°¡±â ¶§¹®¿¡ »óÅ°¡ »ç¿ëµÇÁö ¾Ê´Â °æ¿ì´Â Á¤ÀÇÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.

¹Ýȯ°ª:
µ¿±â°¡ ¹èŸÀûÀ¸·Î ÇàÇØÁö´Â °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false
¿¹¿Ü:
UnsupportedOperationException - »óÅ°¡ Áö¿ø µÇÁö ¾Ê´Â °æ¿ì

acquire

public final void acquire(int arg)
ÀÎÅÍ·´Æ®¸¦ ¹«½ÃÇØ, ¹èŸ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù. ÇÑ ¹ø ÀÌ»ó tryAcquire(int)¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î ±¸ÇöµÇ¾î ¼º°ø½Ã¿¡ º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread´Â Å¥¿¡ ³Ö¾îÁ® ´ëü·ÎÀÇ °æ¿ì ºí·Ï ¹× ºí·Ï ÇØÁ¦¸¦ ¸î¹øÀ̳ª ¹Ýº¹ÇØ, ¼º°øÇÒ ¶§±îÁö tryAcquire(int)¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â Lock.lock() ¸Þ¼­µåÀÇ ±¸Çö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº tryAcquire(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù

acquireInterruptibly

public final void acquireInterruptibly(int arg)
                                throws InterruptedException 
¹èŸ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù. ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì´Â ÁßÁöÇÕ´Ï´Ù. ÃÖÃÊ·Î ³¢¾îµé¾î »óŸ¦ üũÇÏ°í ³ª¼­ ÇÑ ¹ø ÀÌ»ó tryAcquire(int)¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î ±¸ÇöµÇ¾î ¼º°ø½Ã¿¡ º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread´Â Å¥¿¡ ³Ö¾îÁ® ´ëü·ÎÀÇ °æ¿ì ºí·Ï ¹× ºí·Ï ÇØÁ¦¸¦ ¸î¹øÀ̳ª ¹Ýº¹ÇØ, ¼º°øÇÒ±î thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÒ ¶§±îÁö tryAcquire(int)¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â Lock.lockInterruptibly() ¸Þ¼­µåÀÇ ±¸Çö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº tryAcquire(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì

tryAcquireNanos

public final boolean tryAcquireNanos(int arg,
                                     long nanosTimeout)
                              throws InterruptedException 
¹èŸ ¸ðµå·Î ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù. ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì´Â ÁßÁöÇØ, ÁöÁ¤µÈ ŸÀÓ ¾Æ¿ô ½Ã°£ÀÌ °æ°úÇßÀ» °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù. ÃÖÃÊ·Î ³¢¾îµé¾î »óŸ¦ üũÇÏ°í ³ª¼­ ÇÑ ¹ø ÀÌ»ó tryAcquire(int)¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î ±¸ÇöµÇ¾î ¼º°ø½Ã¿¡ º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread´Â Å¥¿¡ ³Ö¾îÁ® ´ëü·ÎÀÇ °æ¿ì ºí·Ï ¹× ºí·Ï ÇØÁ¦¸¦ ¸î¹øÀ̳ª ¹Ýº¹ÇØ, ¼º°øÇÒ±î thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´ÂÁö, ŸÀÓ ¾Æ¿ô ½Ã°£ÀÌ °æ°úÇÒ ¶§±îÁö tryAcquire(int)¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â Lock.tryLock(long, TimeUnit) ¸Þ¼­µåÀÇ ±¸Çö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº tryAcquire(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Â
nanosTimeout - ´ë±âÇÏ´Â ÃÖ´ë ³ª³ëÃʼö
¹Ýȯ°ª:
ÃëµæÇßÀ» °æ¿ì´Â true, ŸÀÓ ¾Æ¿ô ÇßÀ» °æ¿ì´Â false
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì

release

public final boolean release(int arg)
¹èŸ ¸ðµå·Î ÇعæÇÕ´Ï´Ù. tryRelease(int) °¡ true¸¦ µ¹·ÁÁÖ´Â °æ¿ì, 1°³ ÀÌ»óÀÇ thread¸¦ ºí·Ï ÇØÁ¦ÇÏ´Â °ÍÀ¸·Î ±¸ÇöµË´Ï´Ù. ÀÌ ¸Þ¼­µå´Â Lock.unlock() ¸Þ¼­µåÀÇ ±¸ÇöÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - release Àμö. ÀÌ °ªÀº tryRelease(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¹Ýȯ°ª:
tryRelease(int) ·ÎºÎÅÍ ¸®ÅÏµÈ °ª

acquireShared

public final void acquireShared(int arg)
ÀÎÅÍ·´Æ®¸¦ ¹«½ÃÇØ, °øÀ¯ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù. ÃÖÃÊ·Î ÇÑ ¹ø ÀÌ»ó tryAcquireShared(int)¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î ±¸ÇöµÇ¾î ¼º°ø½Ã¿¡ º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread´Â Å¥¿¡ ³Ö¾îÁ® ´ëü·ÎÀÇ °æ¿ì ºí·Ï ¹× ºí·Ï ÇØÁ¦¸¦ ¸î¹øÀ̳ª ¹Ýº¹ÇØ, ¼º°øÇÒ ¶§±îÁö tryAcquireShared(int)¸¦ È£ÃâÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº tryAcquireShared(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù

acquireSharedInterruptibly

public final void acquireSharedInterruptibly(int arg)
                                      throws InterruptedException 
°øÀ¯ ¸ðµå·Î ÃëµæÇÕ´Ï´Ù. ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì¿¡´Â ÁßÁöÇÕ´Ï´Ù. ÃÖÃÊ·Î ³¢¾îµé¾î »óŸ¦ üũÇÏ°í ³ª¼­, ÇÑ ¹ø ÀÌ»ó tryAcquireShared(int)¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î ±¸ÇöµÇ¾î ¼º°ø½Ã¿¡ º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread´Â Å¥¿¡ ³Ö¾îÁ® ´ëü·ÎÀÇ °æ¿ì ºí·Ï ¹× ºí·Ï ÇØÁ¦¸¦ ¸î¹øÀ̳ª ¹Ýº¹ÇØ, ¼º°øÇÒ±î thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÒ ¶§±îÁö tryAcquireShared(int)¸¦ È£ÃâÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº tryAcquireShared(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì

tryAcquireSharedNanos

public final boolean tryAcquireSharedNanos(int arg,
                                           long nanosTimeout)
                                    throws InterruptedException 
°øÀ¯ ¸ðµå·Î ÃëµæÀ» ½ÃµµÇÕ´Ï´Ù. ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì´Â ÁßÁöÇØ, ÁöÁ¤µÈ ŸÀÓ ¾Æ¿ô ½Ã°£ÀÌ °æ°úÇßÀ» °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù. ÃÖÃÊ·Î ³¢¾îµé¾î »óŸ¦ üũÇÏ°í ³ª¼­, ÇÑ ¹ø ÀÌ»ó tryAcquireShared(int)¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î ±¸ÇöµÇ¾î ¼º°ø½Ã¿¡ º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, thread´Â Å¥¿¡ ³Ö¾îÁ® ´ëü·ÎÀÇ °æ¿ì ºí·Ï ¹× ºí·Ï ÇØÁ¦¸¦ ¸î¹øÀ̳ª ¹Ýº¹ÇØ, ¼º°øÇÏ´ÂÁö, thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´ÂÁö, ŸÀÓ ¾Æ¿ô ½Ã°£ÀÌ °æ°úÇÒ ¶§±îÁö tryAcquireShared(int)¸¦ È£ÃâÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - acquire Àμö. ÀÌ °ªÀº tryAcquireShared(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Â
nanosTimeout - ´ë±âÇÏ´Â ÃÖ´ë ³ª³ëÃʼö
¹Ýȯ°ª:
ÃëµæÇßÀ» °æ¿ì´Â true, ŸÀÓ ¾Æ¿ô ÇßÀ» °æ¿ì´Â false
¿¹¿Ü:
InterruptedException - ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì

releaseShared

public final boolean releaseShared(int arg)
°øÀ¯ ¸ðµå·Î ÇعæÇÕ´Ï´Ù. tryReleaseShared(int) °¡ true¸¦ µ¹·ÁÁÖ´Â °æ¿ì, 1°³ ÀÌ»óÀÇ thread¸¦ ºí·Ï ÇØÁ¦ÇÏ´Â °ÍÀ¸·Î ±¸ÇöµË´Ï´Ù.

ÆĶó¹ÌÅÍ:
arg - release Àμö. ÀÌ °ªÀº tryReleaseShared(int)¿¡ ¼Û½ÅµÇÁö¸¸, ±× ¿ÜÀÇ °æ¿ì´Â ¹ÌÇؼ®ÀÌ µÇ¾î, ÀÓÀÇÀÇ °ªÀ» ³ªÅ¸³¾ ¼ö°¡ ÀÖ´Ù
¹Ýȯ°ª:
tryReleaseShared(int) ·ÎºÎÅÍ ¸®ÅÏµÈ °ª

hasQueuedThreads

public final boolean hasQueuedThreads()
ÃëµæÀ» ´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. ¾ðÁ¨°¡´Â ³¢¾îµé¾î ¹× ŸÀÓ ¾Æ¿ô¿¡ ÇÑ Ãë¼Ò°¡ ¹ß»ýÇßÀ» °æ¿ì, true°¡ µ¹·ÁÁÖ°íÁ®µµ ´Ù¸¥ thread°¡ ÃëµæÀ» ½ÇÇàÇÏ´Â °ÍÀº º¸ÁõµÇÁö ¾Ê½À´Ï´Ù.

ÀÌ ±¸Çö¿¡¼­´Â ÀÌ Á¶ÀÛÀº ÀÏÁ¤ÇÑ ½Ã°£¿¡ º¹±ÍÇÕ´Ï´Ù.

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

hasContended

public final boolean hasContended()
ÀÌ µ¿±âÈ­ ÀåÄ¡ÀÇ ÃëµæÀ¸·Î °æÇÕ ÇÏ°í ÀÖ´Â thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö (Áï, acquire ¸Þ¼­µå°¡ ºí·Ï µÇ¾ú´ÂÁö ¾î¶°Çß´ÂÁö)¸¦ Á¶È¸ÇÕ´Ï´Ù.

ÀÌ ±¸Çö¿¡¼­´Â ÀÌ Á¶ÀÛÀº ÀÏÁ¤ÇÑ ½Ã°£¿¡ º¹±ÍÇÕ´Ï´Ù.

¹Ýȯ°ª:
°æÇÕÀÌ Á¸ÀçÇÏ´Â °æ¿ì´Â true

getFirstQueuedThread

public final Thread  getFirstQueuedThread()
Å¥³»ÀÇ ÃÖÃÊÀÇ (´ë±â ½Ã°£ÀÇ °¡Àå ±æ´Ù) thread¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÇöÀç Å¥¿¡ ³Ö¾îÁö°í ÀÖ´Â thread°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â nullÀ» ¸®ÅÏÇÕ´Ï´Ù.

º¸Åë, ÀÌ ±¸Çö¿¡¼­´Â ÀÌ Á¶ÀÛÀº ÀÏÁ¤½Ã°£À¸·Î º¹±ÍÇÕ´Ï´Ù. ´Ù¸¸, ´Ù¸¥ thread°¡ Å¥ÀÇ º¯°æÀ» µ¿½Ã¿¡ ½ÇÇàÇÏ°í ÀÖ´Â °æ¿ì´Â °æÇÕ¿¡ ÀÇÇØ Ã³¸®¸¦ ¹Ýº¹ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
Å¥³»ÀÇ ÃÖÃÊÀÇ (´ë±â ½Ã°£ÀÇ °¡Àå ±æ´Ù) thread. ÇöÀç Å¥¿¡ ³Ö¾îÁö°í ÀÖ´Â thread°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â null

isQueued

public final boolean isQueued(Thread  thread)
ÁöÁ¤µÈ thread°¡ ÇöÀç, Å¥¿¡ ³Ö¾îÁö°í ÀÖ´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.

ÀÌ ±¸ÇöÀº Å¥¸¦ traversalÀÇÇØ ÁöÁ¤µÈ threadÀÇ Á¸À縦 ÆǺ°ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
thread - thread
¹Ýȯ°ª:
ÁöÁ¤µÈ thread°¡ Å¥¿¡ Á¸ÀçÇÏ´Â °æ¿ì´Â true
¿¹¿Ü:
NullPointerException - thread°¡ nullÀÎ °æ¿ì

getQueueLength

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

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

getQueuedThreads

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

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

getExclusiveQueuedThreads

public final Collection <Thread > getExclusiveQueuedThreads()
¹èŸ ¸ðµå·Î ÃëµæÇϱâ À§Çؼ­ ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ°ÍÀº ¹èŸÀû ÃëµæÀ» À§Çؼ­ ´ë±âÁßÀÇ thread¸¸À» µ¹·ÁÁÖ´Â °ÍÀ» Á¦¿ÜÇؼ­´Â getQueuedThreads() ¿Í °°Àº ÇÁ·ÎÆÛƼ¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.

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

getSharedQueuedThreads

public final Collection <Thread > getSharedQueuedThreads()
°øÀ¯ ¸ðµå·Î ÃëµæÇϱâ À§Çؼ­ ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ°ÍÀº °øÀ¯Àû ÃëµæÀ» À§Çؼ­ ´ë±âÁßÀÇ thread¸¸À» µ¹·ÁÁÖ´Â °ÍÀ» Á¦¿ÜÇØ, getQueuedThreads() ¿Í °°Àº ÇÁ·ÎÆÛƼ¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.

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

toString

public String  toString()
µ¿±âÈ­ ÀåÄ¡ ¹× ±× »óŸ¦ ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎÀ» ¸®ÅÏÇÕ´Ï´Ù. »óÅ´ °ýÈ£·Î µÑ·¯½Î¿© ij¸¯ÅÍ ¶óÀÎ ¡¸State =¡¹¿¡ À̾î getState() ÇöÀç »óÅ ¹× Å¥°¡ ºñ¾îÀÖ´ÂÁö¿¡ ´ëÇØ ¡¸nonempty¡¹¶Ç´Â ¡¸empty¡¹°¡ Æ÷ÇԵ˴ϴÙ.

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

owns

public final boolean owns(AbstractQueuedSynchronizer.ConditionObject  condition)
ÁöÁ¤µÈ ConditionObject°¡ ÀÌ µ¿±âÈ­ ÀåÄ¡¸¦ ¶ôÀ¸·Î¼­ »ç¿ëÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù.

ÆĶó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
¼ÒÀ¯µÇ´Â °æ¿ì´Â true
¿¹¿Ü:
NullPointerException - »óÅ°¡ nullÀÎ °æ¿ì

hasWaiters

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

ÆĶó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÏ´Â °æ¿ì´Â true
¿¹¿Ü:
IllegalMonitorStateException - ¹èŸÀû µ¿±â°¡ º¸°ü À¯ÁöµÇÁö ¾Ê´Â °æ¿ì
IllegalArgumentException - ÁöÁ¤µÈ »óÅ°¡ ÀÌ µ¿±âÈ­ ÀåÄ¡¿Í °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException - »óÅ°¡ nullÀÎ °æ¿ì

getWaitQueueLength

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

ÆĶó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö
¿¹¿Ü:
IllegalMonitorStateException - ¹èŸÀû µ¿±â°¡ º¸°ü À¯ÁöµÇÁö ¾Ê´Â °æ¿ì
IllegalArgumentException - ÁöÁ¤µÈ »óÅ°¡ ÀÌ µ¿±âÈ­ ÀåÄ¡¿Í °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException - »óÅ°¡ nullÀÎ °æ¿ì

getWaitingThreads

public final Collection <Thread > getWaitingThreads(AbstractQueuedSynchronizer.ConditionObject  condition)
ÀÌ µ¿±âÈ­ ÀåÄ¡¿¡ °ü·ÃµÈ ÁöÁ¤ »óÅ·Π´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù. ½ÇÁ¦ÀÇ thread ¼¼Æ®´Â °á°úÀÇ ±¸ÃàÁß¿¡ µ¿ÀûÀ¸·Î º¯È­ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ ¸®ÅÏµÈ Ä÷º¼ÇÀº ÃÖ¼±ÀÌ ³ë·ÂÇÑ ´ÙÀ½ÀÇ ÃßÁ¤¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. ¸®ÅÏµÈ Ä÷º¼ÇÀÇ ¿ä¼Ò¿¡´Â ƯÁ¤ÀÇ ¼ø¼­´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
condition - »óÅÂ
¹Ýȯ°ª:
threadÀÇ Ä÷º¼Ç
¿¹¿Ü:
IllegalMonitorStateException - ¹èŸÀû µ¿±â°¡ º¸°ü À¯ÁöµÇÁö ¾Ê´Â °æ¿ì
IllegalArgumentException - ÁöÁ¤µÈ »óÅ°¡ ÀÌ µ¿±âÈ­ ÀåÄ¡¿Í °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException - »óÅ°¡ nullÀÎ °æ¿ì

JavaTM 2 Platform
Standard Ed. 5.0

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