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 ÀÐÀ» 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ÀÎ °æ¿ì
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ
ÂüÁ¶ÇϽʽÿÀ.