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
- °ü·Ã Ç׸ñ:
- Á÷·ÄÈ µÈ Çü½Ä
»ý¼ºÀÚ °³¿ä |
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)
°øÀ¯ ¸ðµå¿¡¼ÀÇ ÇØ¹æÀ» ¹Ý¿µÇϵµ·Ï, »óÅÂÀÇ ¼³Á¤À» ½ÃµµÇÕ´Ï´Ù. |
AbstractQueuedSynchronizer
protected AbstractQueuedSynchronizer()
- Á¦·ÎÀÇ Ãʱ⠵¿±â »óŸ¦ »ç¿ëÇØ, »õ·Î¿î AbstractQueuedSynchronizer ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
getState
protected final int getState()
- µ¿±â »óÅÂÀÇ ÇöÀç°¡¸¦ µ¹·ÁÁÝ´Ï´Ù. ÀÌ Á¶ÀÛÀº,volatile ÀÐÀ» ¸Þ¸ð¸®¼¼¸¸Æ¼Å©½º¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.
- ¹Ýȯ°ª:
- ÇöÀç »óÅÂÄ¡
setState
protected final void setState(int newState)
- µ¿±â »óÅÂÀÇ °ªÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÌ Á¶ÀÛÀº,volatile ±âÀÔÀÇ ¸Þ¸ð¸®¼¼¸¸Æ¼Å©½º¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.
- ÆÄ¶ó¹ÌÅÍ:
newState
- »õ·Î¿î »óÅÂÄ¡
compareAndSetState
protected final boolean compareAndSetState(int expect,
int update)
- ÇöÀç »óÅÂÄ¡°¡ ¿¹»óµÇ´Â °ª¿¡ µ¿ÀÏÇÑ °æ¿ì, µ¿±â »óŰ¡ ÁöÁ¤µÈ °»½ÅÄ¡¿¡ ¿øÀÚÀûÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ Á¶ÀÛÀº,volatile read ¹× ±âÀÔÀÇ ¸Þ¸ð¸®¼¼¸¸Æ¼Å©½º¸¦ º¸°ü À¯ÁöÇÕ´Ï´Ù.
- ÆÄ¶ó¹ÌÅÍ:
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¸¦
µ¹·ÁÁÝ´Ï´Ù.
ÀÌ ±¸ÇöÀº, Å¥¸¦ ¾Ïº® Ⱦ´Ü ÇØ ÁöÁ¤µÈ threadÀÇ Á¸À縦 ÆÇº°ÇÕ´Ï´Ù.
- ÆÄ¶ó¹ÌÅÍ:
thread
- thread
- ¹Ýȯ°ª:
- ÁöÁ¤µÈ thread°¡ Å¥¿¡ Á¸ÀçÇÏ´Â °æ¿ì´Â true
- ¿¹¿Ü:
NullPointerException
- thread°¡ null
°æ¿ì
getQueueLength
public final int getQueueLength()
- ÃëµæÀ» ´ë±âÇϰí ÀÖ´Â threadÀÇ ÃßÁ¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù. ÀÌ ¸Þ¼µå°¡ ³»ºÎÀÇ µ¥ÀÌÅÍ ±¸Á¶¸¦ ¾Ïº® Ⱦ´Ü Çϰí ÀÖ´Â µ¿¾È¿¡µµ, 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
°æ¿ì
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ ÂüÁ¶ÇϽʽÿÀ.