JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent.locks
ÀÎÅÍÆäÀ̽º Lock

¾Ë·ÁÁø ±¸Çö Ŭ·¡½º ¸ñ·Ï:
ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock

public interface Lock

Lock ±¸ÇöÀº, synchronized ¸Þ¼­µå³ª ¹®ÀåÀ» »ç¿ëÇÏ´Â °ÍÀ¸·Î Ãëµæ °¡´ÉÇÑ ¶ô Á¶ÀÛº¸´Ù ±¤¹üÀ§ÇÑ ¶ô Á¶ÀÛÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ ±¸ÇöÀ» »ç¿ëÇϸé, º¸´Ù À¯¿¬ÇÑ ±¸Á¶³ª ¿ÏÀüÈ÷ ´Ù¸¥ ÇÁ·ÎÆÛƼ¸¦ º¸°ü À¯ÁöÇϰųª °ü·ÃµÈ º¹¼ö Condition °´Ã¼¸¦ Áö¿ø ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

¶ôÀº º¹¼öÀÇ thread¿¡ ÇÑ °øÀ¯ ÀÚ¿ø¿¡ÀÇ ¾×¼¼½º¸¦ Á¦¾îÇϱâ À§ÇÑ ÅøÀÔ´Ï´Ù. º¸Åë, ¶ôÀº °øÀ¯ ÀÚ¿ø¿¡ÀÇ ¹èŸÀûÀÎ ¾×¼¼½º¸¦ Á¦°øÇÕ´Ï´Ù. ¶ôÀ» ÃëµæÇÒ ¼ö ÀÖ´Â °ÍÀº ÇÑ ¹ø¿¡ 1°³ÀÇ thread »ÓÀ̾, ¸ðµç °øÀ¯ ÀÚ¿ø¿¡ ¾×¼¼½º ÇÏ·Á¸é ¶ôÀ» ÃÖÃÊ·Î ÃëµæÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ´Ù¸¸, ReadWriteLock read ¶ôµîÀÇ ÀϺÎÀÇ ¶ô¿¡¼­´Â °øÀ¯ ÀÚ¿ø¿¡ÀÇ µ¿½Ã ¾×¼¼½º°¡ Çã°¡µÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.

synchronized ¸Þ¼­µå³ª ¹®ÀåÀÇ »ç¿ë¿¡ÀÇÇØ °¢ °´Ã¼¿¡ °ü·ÃµÈ ¾Ï¹¬ÀÇ °¨½Ã ¶ô¿¡ÀÇ ¾×¼¼½º¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, ¶ôÀÇ Ãëµæ ¹× ÇعæÀº ¸ðµÎ ºí·Ï ±¸Á¶¿¡ µû¶ó ½Ç½ÃÇÏ´Â °ÍÀÌ ¿ä±¸µË´Ï´Ù. ÀÌ ¶§¹®¿¡ º¹¼öÀÇ ¶ôÀÌ ÃëµæµÇ¾úÀ» °æ¿ì, ±× ÇعæÀº Ãëµæ°ú´Â ¹Ý´ëÀÇ ¼ø¼­·Î ½Ç½ÃÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¶Ç, ¸ðµç ¶ôÀÇ ÇعæÀº ±×°ÍµéÀÌ ÃëµæµÈ ¹üÀ§³»¿¡¼­ ½Ç½ÃÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

synchronized ¸Þ¼­µå ¹× ¹®ÀåÀÇ ¹üÀ§ µµ±¸´Â °¨½Ã ¶ôÀÇ ÇÁ·Î±×·¡¹ÖÀ» Å«ÆøÀ¸·Î ¿ëÀÌÇÏ°ÔÇÔ°ú ÇÔ²², ¶ô¿¡ °ü·ÃÇÑ ÀϹÝÀûÀÎ ÇÁ·Î±×·¡¹Ö ¿¡·¯ÀÇ ´ëºÎºÐÀ» ÇÇÇϴµ¥ µµ¿òÀÌ µË´Ï´Ù¸¸, ¶ôÀÇ Á¶ÀÛÀ» º¸´Ù À¯¿¬ÇÏ°Ô ½Ç½ÃÇÒ ÇÊ¿ä°¡ ÀÖ´Â »óȲÀÌ Á¸ÀçÇÕ´Ï´Ù. ¿¹¸¦ µé¾î µ¥ÀÌÅÍ ±¸Á¶¿¡ µ¿½Ã¿¡ ¾×¼¼½º ÇÏ´Â ÀϺÎÀÇ traversal ¾Ë°í¸®Áò¿¡¼­´Â ¡¸hand-over-hand¡¹¶Ç´Â ¡¸chain locking¡¹¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì ³ëµå A ¶ôÀ» ÃëµæÇØ, ´ÙÀ½¿¡ ³ëµå B ¶ôÀ» ÃëµæÇØ, ´ÙÀ½¿¡ A¸¦ ÇعæÇØ C¸¦ ÃëµæÇØ, ´ÙÀ½¿¡ B¸¦ ÇعæÇØ D¸¦ ÃëµæÇÑ´Ù, ¶ó°í ÇÏ´Â »óÅ¿¡ 󸮸¦ ÁøÇà½Ãŵ´Ï´Ù. Lock ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϸé, ´Ù¸¥ ½ºÄÚÇÁ³»¿¡¼­ ¶ôÀ» Ãëµæ ¹× ÇعæÇϰųª º¹¼öÀÇ ¶ôÀ» ÀÓÀÇÀÇ ¼ø¼­·Î Ãëµæ ¹× ÇعæÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µÇ±â ¶§¹®¿¡ ÀÌ·± Á¾·ùÀÇ Å×Å©´ÐÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

ÀÌ¿Í °°ÀÌ À¯¿¬¼ºÀÌ ³ô¾ÆÁö¸é, »õ·Î¿î Ã¥ÀÓµµ ¹ß»ýÇÕ´Ï´Ù. ºí·Ï ±¸Á¶ ¶ôÀÌ Á¸ÀçÇÏÁö ¾Ê°Ô µÇ´Â °ÍÀ¸·Îsynchronized ¸Þ¼­µå ¹× ¹®ÀåÀ¸·Î ½ÇÇàµÇ´Â ¶ôÀÇ ÀÚµ¿ ÇعæÀÌ ±â´ÉÇÏÁö ¾Ê°Ô µË´Ï´Ù. ´ëü·ÎÀÇ °æ¿ì, ´ÙÀ½ÀÇ Äڵ带 »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

Lock l = ...;
 
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}
¶ô ¹× ¶ô ÇØÁ¦°¡ ´Ù¸¥ ½ºÄÚÇÁ³»¿¡¼­ ÇàÇØÁö´Â °æ¿ì, ¶ôÀÇ º¸°ü À¯ÁöÁß¿¡ ½ÇÇàµÇ´Â ¸ðµç Äڵ尡 try-finally ¶Ç´Â try-catch¿¡ ÀÇÇØ º¸È£µÇ¾î ÇÊ¿ä¿¡ µû¶ó¼­ ¶ôÀÌ È®½ÇÈ÷ ÇعæµÇµµ·Ï ÁÖÀ§¸¦ ±â¿ïÀÏ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

Lock ±¸ÇöÀº ¶ô (tryLock() )¸¦ ÃëµæÇϱâ À§ÇÑ ºñºí·Ï ½ÃÇà, ³¢¾îµé¾î °¡´ÉÇÑ ¶ô (lockInterruptibly() ³ª ŸÀÓ ¾Æ¿ô °¡´ÉÇÑ ¶ô (tryLock(long, TimeUnit) )¸¦ ¾ò´Â ½ÃÇàÀ» Á¦°øÇÏ´Â °ÍÀ¸·Î½á, synchronized ¸Þ¼­µå ¹× ¹®Àå¿¡ÀÇ Ãß°¡ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.

Lock Ŭ·¡½º´Â º¸ÁõµÈ ¼ø¼­ ºÙ¿© ÀçÀÔ ºÒ°¡´ÉÇÑ »ç¿ë, µ¥µå ·ÏÀÇ °ËÃâ µî, ¾Ï¹¬ÀÇ °¨½Ã ¶ô°ú´Â ¿ÏÀüÈ÷ ´Ù¸¥ µ¿ÀÛÀ̳ª ½Ã¸àƽ½º¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ±¸ÇöÀÌ ÀÌ·¯ÇÑ Æ¯¼ö ½Ã¸àƽ½º¸¦ Á¦°øÇÏ´Â °æ¿ì, ±¸ÇöÀº ÀÌ·¯ÇÑ ½Ã¸àƽ½º¸¦ ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

Lock ÀνºÅϽº´Â º¸Åë ÀÇ °´Ã¼¿¡ Áö³ªÁö ¾Ê°í, ±× ÀÚü¸¦ synchronized ¹®ÀÇ Å¸°ÙÀ¸·Î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â °Í¿¡ À¯ÀÇÇØ ÁÖ¼¼¿ä. Lock ÀνºÅϽºÀÇ °¨½Ã ¶ôÀ» ¾ò´Â °ÍÀ¸·Î ±× ÀνºÅϽºÀÇ ¸î°³ÀÇ lock() ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î´Â ƯÈ÷ °ü°è°¡ ¾ø½À´Ï´Ù. È¥¶õÀ» ÇÇÇϱ⠶§¹®¿¡ µ¶ÀÚÀûÀÎ ±¸Çö ÀÌ¿Ü¿¡¼­´Â ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î Lock ÀνºÅϽº¸¦ °áÄÚ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀ» ÃßõÇÕ´Ï´Ù.

ƯÈ÷ ¸í±âµÇ¾î ÀÖÁö ¾ÊÀº ÇÑ, ¸î°³ÀÇ ÆĶó¹ÌÅÍ¿¡ ´ëÇØ null Ä¡¸¦ °Ç³×ÁÖ¸é, NullPointerExceptionÀ» ¹ß»ý½Ãŵ´Ï´Ù.

¸Þ¸ð¸®ÀÇ µ¿±âÈ­

¸ðµç Lock ±¸ÇöÀº ºôÆ®ÀÎ °¨½Ã ¶ôÀÌ Á¦°øÇÏ´Â °Í°ú °°Àº ¸Þ¸ð¸® µ¿±â ½Ã¸àƽ½º¸¦ ½ÃÇàÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ±× ³»¿ëÀ» ³ªÅ¸³À´Ï´Ù.

¼º°øÇÏÁö ¾Ê´Â ¶ô ¹× ¶ô ÇØÁ¦ Á¶ÀÛ ¹× ÀçÀÔ °¡´ÉÇÑ ¶ô/¶ô ÇØÁ¦ Á¶ÀÛÀº ¸Þ¸ð¸® µ¿±â È¿°ú¸¦ ÀÏÀý ÇÊ¿ä·Î ÇÏÁö ¾Ê½À´Ï´Ù.

±¸Çö»óÀÇ °í·Á»çÇ×

¶ô ÃëµæÀÇ 3°³ÀÇ Çü½Ä (ÀÎÅÍ·´Æ®°¡´É, ÀÎÅÍ·´Æ® ºÒ°¡ ¹× ½Ã°¢ ÁöÁ¤)¿¡¼­´Â ÆÛÆ÷¸Õ½º Ư¼º, ¼ø¼­ºÎÀÇ º¸Áõ, ´Ù¸¥ ±¸Çö Ç°ÁúÀÌ ´Ù¸¨´Ï´Ù. ¶Ç, ¡¸ÁøÇàÁßÀÇ¡¹¶ô Ãëµæ¿¡ÀÇ ³¢¾îµé¾î ±â´Éµµ, ÁöÁ¤µÈ Lock Ŭ·¡½º¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ ¶§¹®¿¡ 3°³ÀÇ ¶ô Ãëµæ Çü½Ä ¸ðµÎ·Î ±¸ÇöÀÌ ¾ö¹ÐÇÏ°Ô °°Àº º¸ÁõÀ̳ª ½Ã¸àƽ½º¸¦ Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¶Ç, ÁøÇàÁßÀÇ ¶ô ÃëµæÀÇ ÀÎÅÍ·´Æ®¸¦ Áö¿ø ÇÒ ÇÊ¿äµµ ¾ø½À´Ï´Ù. ±¸ÇöÀº °¢ ¶ô ¸Þ¼­µåÀÇ Á¦°øÇÏ´Â ½Ã¸àƽ½º ¹× º¸ÁõÀ» ¸íÈ®ÇÏ°Ô ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¶Ç, ¶ô ÃëµæÀÇ ÀÎÅÍ·´Æ®°¡ Áö¿ø µÇ´Â ¹üÀ§³» (Àüü ¶Ç´Â ¸Þ¼­µå ¿£Æ®¸®¸¸)¿¡¼­ ÀÌ ÀÎÅÍÆäÀ̽º·Î Á¤ÀÇµÈ ÀÎÅÍ·´Æ® ½Ã¸àƽ½º¿¡ µû¸¦ ÇÊ¿äµµ ÀÖ½À´Ï´Ù.

º¸Åë, ÀÎÅÍ·´Æ®´Â Ãë¼Ò¸¦ ¹ÌÇØ, ÀÎÅÍ·´Æ®ÀÇ Ã¼Å©´Â ºó¹øÇÏ°Ô ÇàÇØÁö´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡ ±¸ÇöÀº º¸Åë ÀÇ ¸Þ¼­µå º¹±Í¿¡ ´ëÇÑ ÀÎÅÍ·´Æ®¿¡ ±àÁ¤ÀûÀ¸·Î ÀÀ´äÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ´Ù¸¥ ¾×¼ÇÀÌ thread¸¦ ºí·Ï ÇØÁ¦ÇÑ µÚ¿¡ ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇß´ø °Í(Àû)ÀÌ ³ªÅ¸³ª´Â °æ¿ì¿¡µµ µé¾î¸ÂÀ¾´Ï´Ù. ±¸ÇöÀº ÀÌ µ¿ÀÛÀ» ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

µµÀÔµÈ ¹öÀü :
1.5
°ü·Ã Ç׸ñ:
ReentrantLock, Condition, ReadWriteLock

¸Þ¼­µå °³¿ä
 void lock ()
          ¶ôÀ» ÃëµæÇÕ´Ï´Ù.
 void lockInterruptibly ()
          ÇöÀçÀÇ thread°¡ interrupted °¡ ¾Æ´Ñ ÇÑ, ¶ôÀ» ÃëµæÇÕ´Ï´Ù.
 Condition newCondition ()
          ÀÌ Lock ÀνºÅϽº¿¡ ¹ÙÀÎµå µÈ »õ·Î¿î Condition¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 boolean tryLock ()
          È£Ãâ½Ã¿¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡°Ô¸¸, ¶ôÀ» ÃëµæÇÕ´Ï´Ù.
 boolean tryLock (long time, TimeUnit  unit)
          ÁöÁ¤µÈ ´ë±â ½Ã°£³»¿¡ ¶ôÀÌ ÀÌ¿ë °¡´ÉÇÏ°í, ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ¶ôÀ» ÃëµæÇÕ´Ï´Ù.
 void unlock ()
          ÀÌ ¶ôÀ» ÇØÁ¦ÇÕ´Ï´Ù.
 

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

lock

void lock()
¶ôÀ» ÃëµæÇÕ´Ï´Ù.

¶ôÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ¶ôÀÌ ÃëµæµÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

±¸Çö»óÀÇ °í·Á»çÇ×

Lock ±¸ÇöÀº µ¥µå ·ÏÀ» ÀÏÀ¸Å°´Â È£ÃâµîÀÇ ¶ôÀÇ ºÎÁ¤»ç¿ëÀ» °ËÃâÇØ, ±×·¯ÇÑ »óȲÀ¸·Î (üũµÇÁö ¾Ê´Â´Ù) = ¿¹¿Ü¸¦ ¹ß»ý½Ãų ¼ö ÀÖ½À´Ï´Ù. Lock ±¸Çö¿¡ÀÇÇØ ÇØ´çÇÏ´Â »óȲ ¹× ¿¹¿ÜÀÇ ÇüŸ¦ ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.


lockInterruptibly

void lockInterruptibly()
                       throws InterruptedException 
ÇöÀçÀÇ thread°¡ interrupted °¡ ¾Æ´Ñ ÇÑ, ¶ôÀ» ÃëµæÇÕ´Ï´Ù.

ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¿¡ ¶ôÀ» ÃëµæÇØ, °ð¹Ù·Î º¹±ÍÇÕ´Ï´Ù.

¶ôÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 2°³ Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÇöÀçÀÇ thread·Î

InterruptedExceptionÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® ½ºÅ×ÀÌÅͽº°¡ Ŭ¸®¾î µË´Ï´Ù.

±¸Çö»óÀÇ °í·Á»çÇ×

¾î´À »óȲÇÏ¿¡¼­´Â ¶ô Ãëµæ¿¡ ³¢¾îµéÁö ¸øÇÏ°í, °æ¿ì¿¡ µû¶ó¼­´Â ºÎÇÏÀÇ Å« Á¶ÀÛÀÌ µÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¡¸Ó´Â ÀÌ·¯ÇÑ °æ¿ì°¡ ÀÖ´Â °ÍÀ» ½ÄÇØ µÑ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ±¸ÇöÀº ÇØ´çÇÏ´Â »óȲÀ» ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

±¸ÇöÀº º¸Åë ÀÇ ¸Þ¼­µå º¹±Í¿¡ ´ëÇÑ ÀÎÅÍ·´Æ®¿¡ ±àÁ¤ÀûÀ¸·Î ÀÀ´äÇÒ ¼ö ÀÖ½À´Ï´Ù.

Lock ±¸ÇöÀº µ¥µå ·ÏÀ» ÀÏÀ¸Å°´Â È£ÃâµîÀÇ ¶ôÀÇ ºÎÁ¤»ç¿ëÀ» °ËÃâÇØ, ±×·¯ÇÑ »óȲÀ¸·Î (üũµÇÁö ¾Ê´Â´Ù) = ¿¹¿Ü¸¦ ¹ß»ý½Ãų ¼ö ÀÖ½À´Ï´Ù. Lock ±¸Çö¿¡ÀÇÇØ ÇØ´çÇÏ´Â »óȲ ¹× ¿¹¿ÜÀÇ ÇüŸ¦ ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

¿¹¿Ü:
InterruptedException - ¶ôÀÇ ÃëµæÁß ( ¹× ¶ô ÃëµæÀÇ Áß´ÜÀÌ Áö¿ø µÇ°í ÀÖ´Â »óȲ)¿¡ ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â °æ¿ì
°ü·Ã Ç׸ñ:
Thread.interrupt()

tryLock

boolean tryLock()
È£Ãâ½Ã¿¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡°Ô¸¸, ¶ôÀ» ÃëµæÇÕ´Ï´Ù.

°¡´ÉÇÑ °æ¿ì¿¡ ¶ôÀ» ÃëµæÇØ, °ª true·Î °ð¹Ù·Î º¹±ÍÇÕ´Ï´Ù. ¶ôÀÌ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì, ÀÌ ¸Þ¼­µå´Â °ª false·Î °ð¹Ù·Î º¹±ÍÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µåÀÇ º¸Åë ÀÇ »ç¿ë ¹æ¹ýÀ» ´ÙÀ½¿¡ ³ªÅ¸³À´Ï´Ù.


Lock lock = ...;
if (lock.tryLock()) {
try {
// manipulate protected state
} finally {
lock.unlock();
}
} else {
// perform alternative actions
}
ÀÌ »ç¿ë¿¡ÀÇÇØ ¶ôÀÌ ÃëµæµÇ¾úÀ» °æ¿ì¿¡ ¶ôÀÌ ÇØÁ¦µÇ´Â °Í ¹× ¶ôÀÌ ÃëµæµÇÁö ¾Ê¾Ò´ø °æ¿ì¿¡ ¶ô ÇØÁ¦¸¦ ½ÃµµÇÏÁö ¾Ê´Â °ÍÀÌ º¸ÁõµË´Ï´Ù.

¹Ýȯ°ª:
¶ôÀÌ ÃëµæµÇ¾úÀ» °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false

tryLock

boolean tryLock(long time,
                TimeUnit  unit)
                throws InterruptedException 
ÁöÁ¤µÈ ´ë±â ½Ã°£³»¿¡ ¶ôÀÌ ÀÌ¿ë °¡´ÉÇÏ°í, ÇöÀçÀÇ thread·ÎÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°í ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ¶ôÀ» ÃëµæÇÕ´Ï´Ù.

¶ôÀÌ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì, ÀÌ ¸Þ¼­µå´Â Áï½Ã °ª true·Î º¹±ÍÇÕ´Ï´Ù. ¶ôÀ» ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÇöÀçÀÇ thread°¡ thread ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 3 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

¶ôÀÌ ÃëµæµÇ¸é, true°¡ ¸®Åϵ˴ϴ٠.

ÇöÀçÀÇ thread·Î

InterruptedExceptionÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® ½ºÅ×ÀÌÅͽº°¡ Ŭ¸®¾î µË´Ï´Ù.

ÁöÁ¤µÈ ´ë±â ½Ã°£ÀÌ °æ°úÇϸé, °ª false°¡ ¸®Åϵ˴ϴ٠. ½Ã°£ÀÌ Á¦·Î ¶Ç´Â ±×°Íº¸´Ù ÀÛÀº °æ¿ì, ¸Þ¼­µå´Â ´ë±âÇÏÁö ¾Ê½À´Ï´Ù.

±¸Çö»óÀÇ °í·Á»çÇ×

¾î´À »óȲÇÏ¿¡¼­´Â ¶ô Ãëµæ¿¡ ³¢¾îµéÁö ¸øÇÏ°í, °æ¿ì¿¡ µû¶ó¼­´Â ºÎÇÏÀÇ Å« Á¶ÀÛÀÌ µÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¡¸Ó´Â ÀÌ·¯ÇÑ °æ¿ì°¡ ÀÖ´Â °ÍÀ» ½ÄÇØ µÑ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ±¸ÇöÀº ÇØ´çÇÏ´Â »óȲÀ» ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

±¸ÇöÀº º¸Åë ÀÇ ¸Þ¼­µå º¹±Í¿¡ ´ëÇÑ ÀÎÅÍ·´Æ®, ¶Ç´Â ŸÀÓ ¾Æ¿ôÀÇ ¸®Æ÷Æ®¿¡ ±àÁ¤ÀûÀ¸·Î ÀÀ´äÇÒ ¼ö ÀÖ½À´Ï´Ù.

Lock ±¸ÇöÀº µ¥µå ·ÏÀ» ÀÏÀ¸Å°´Â È£ÃâµîÀÇ ¶ôÀÇ ºÎÁ¤»ç¿ëÀ» °ËÃâÇØ, ±×·¯ÇÑ »óȲÀ¸·Î (üũµÇÁö ¾Ê´Â´Ù) = ¿¹¿Ü¸¦ ¹ß»ý½Ãų ¼ö ÀÖ½À´Ï´Ù. Lock ±¸Çö¿¡ÀÇÇØ ÇØ´çÇÏ´Â »óȲ ¹× ¿¹¿ÜÀÇ ÇüŸ¦ ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
time - ¶ôÀÇ ÃÖÀå ´ë±â ½Ã°£
unit - time ÀμöÀÇ ½Ã°£ ´ÜÀ§
¹Ýȯ°ª:
¶ôÀÌ ÃëµæµÇ¾úÀ» °æ¿ì´Â true, ¶ôÀÌ ÃëµæµÇ±â Àü¿¡ ´ë±â ½Ã°£ÀÌ °æ°úÇßÀ» °æ¿ì´Â false
¿¹¿Ü:
InterruptedException - ¶ôÀÇ ÃëµæÁß ( ¹× ¶ô ÃëµæÀÇ Áß´ÜÀÌ Áö¿ø µÇ°í ÀÖ´Â »óȲ)¿¡ ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â °æ¿ì
°ü·Ã Ç׸ñ:
Thread.interrupt()

unlock

void unlock()
ÀÌ ¶ôÀ» ÇØÁ¦ÇÕ´Ï´Ù.

±¸Çö»óÀÇ °í·Á»çÇ×

º¸Åë, Lock ±¸ÇöÀº ¶ôÀ» ÇØ¹æ °¡´ÉÇÑ thread¿¡ °üÇؼ­ Á¦ÇÑÀ» ºÎ°úÇØ (ÀϹÝÀûÀ¸·Î ¶ôÀÇ È¦´õ¸¸À» ÇعæÇÒ ¼ö ÀÖ´Ù), Á¦ÇÑÀÌ Ä§¹üµÇ¾úÀ» °æ¿ì¿¡´Â (üũµÇÁö ¾Ê´Â´Ù) = ¿¹¿Ü¸¦ ¹ß»ý½Ãų ¼ö ÀÖ½À´Ï´Ù. Á¦ÇÑ ¹× ¿¹¿ÜÀÇ ÇüÅ´ ¸ðµÎ, Lock ±¸Çö¿¡ ÀÇÇØ ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.


newCondition

Condition  newCondition()
ÀÌ Lock ÀνºÅϽº¿¡ ¹ÙÀÎµå µÈ »õ·Î¿î Condition¸¦ ¸®ÅÏÇÕ´Ï´Ù.

»óÅÂÀÇ ´ë±â¸¦ ½ÇÇàÇϱâ Àü¿¡ ÇöÀçÀÇ thread°¡ ¶ôÀ» º¸°ü À¯ÁöÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. Condition.await() ¿¡ÀÇ È£Ãâ¿¡ÀÇÇØ ´ë±â°¡ º¹±ÍÇϱâ Àü¿¡ ¶ôÀ» ´ë±â ¹× ÀçÃëµæÇϱâ Àü¿¡ ¶ôÀÌ ¿øÀÚÀûÀ¸·Î ÇعæµË´Ï´Ù.

±¸Çö»óÀÇ °í·Á»çÇ×

Condition ÀνºÅϽºÀÇ ¾ö¹ÐÇÑ Á¶ÀÛÀº Lock ±¸Çö¿¡ Á¸Çϱâ À§ÇØ, ±¸Çö¿¡ ÀÇÇØ ¹®¼­È­ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

¹Ýȯ°ª:
ÀÌ Lock ÀνºÅϽº¿ëÀÇ »õ·Î¿î Condition
¿¹¿Ü:
UnsupportedOperationException - ÀÌ Lock ±¸ÇöÀÌ »óŸ¦ Áö¿ø ÇÏÁö ¾Ê´Â °æ¿ì

JavaTM 2 Platform
Standard Ed. 5.0

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