|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
ÀÌÀü Ŭ·¡½º ´ÙÀ½ Ŭ·¡½º | ÇÁ·¹ÀÓÀ¸·Î ÇÁ·¹ÀÓ ¾øÀÌ | |||||||||
°³¿ä: NESTED | Çʵå | constructor | ¸Þ¼µå | »ó¼¼: Çʵå | »ý¼ºÀÚ | ¸Þ¼µå |
java.lang.Objectjava.util.concurrent.locks.ReentrantLock
public class ReentrantLock
synchronized ¸Þ¼µå ¹× ¹®ÀåÀ» »ç¿ëÇØ ¾×¼¼½º ÇÏ´Â ¾Ï¹¬ÀÇ °¨½Ã ¶ô°ú °°Àº ±âº» µ¿ÀÛ ¹× ½Ã¸àƽ½º¸¦ »ç¿ëÇØ, ÇÑÆí È®Àå ±â´ÉÀ» °¡Áö´Â ÀçÀÔ °¡´ÉÇÑ »óÈ£ ¹èŸ Lock
ÀÔ´Ï´Ù.
ReentrantLock´Â
¸¶Áö¸·¿¡ ¶ô¿¡ ¼º°øÇßÁö¸¸ ¾ÆÁ÷ ¶ô ÇØÁ¦Çϰí ÀÖÁö ¾Ê´Â thread¿¡ ÀÇÇØ ¡¸¼ÒÀ¯¡¹µË´Ï´Ù. ¶ôÀÌ ´Ù¸¥ thread¿¡ ¼ÒÀ¯µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì, lock¸¦ È£ÃâÇÏ´Â thread°¡ º¹±ÍÇØ ¶ôÀÇ Ãëµæ¿¡ ¼º°øÇÕ´Ï´Ù. ÇöÀçÀÇ thread°¡ ¶ôÀ» À̹Ì
¼ÒÀ¯Çϰí ÀÖ´Â °æ¿ì, ¸Þ¼µå´Â Áï½Ã º¹±ÍÇÕ´Ï´Ù. À̰ÍÀº, isHeldByCurrentThread()
¹× getHoldCount()
¸Þ¼µå¸¦ »ç¿ëÇØ üũÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ Å¬·¡½ºÀÇ »ý¼ºÀÚ´Â ¿É¼ÇÀÇ fairness ÆÄ¶ó¹ÌÅ͸¦ ¹Þ¾ÆµéÀÔ´Ï´Ù. À̰ÍÀÌ true·Î
¼³Á¤µÇ¸é, °æÇÕÀÌ Á¸ÀçÇÏ´Â °æ¿ì, ¶ôÀº °¡Àå ±æ°Ô ´ë±âÇϰí ÀÖ´Â thread¿¡ÀÇ ¾×¼¼½º¸¦ Çã°¡Çϵµ·Ï ÀÀ´äÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì, ÀÌ ¶ôÀÌ Æ¯Á¤ÀÇ ¾×¼¼½º¼ø¼¸¦ º¸ÁõÇÒ °ÍÀº ¾ø½À´Ï´Ù. ´Ù¼öÀÇ thread¿¡ ÀÇÇØ ¾×¼¼½º µÇ´Â ±Õµî ¶ôÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº µðÆúÆ® ¼³Á¤À» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥º¸´Ù ³·Àº (º¸´Ù Àú¼ÓÀÎ, ¸¹Àº °æ¿ì ¸Å¿ì Àú¼ÓÀÎ) Àüü throughput¸¦ Ç¥½ÃÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù¸¸, ¶ôÀ» ÃëµæÇÒ ¶§ÀÇ º¯µ¿Àº º¸´Ù ÀÛ¾ÆÁ®, °í°¥ÇÏÁö ¾Ê´Â °ÍÀÌ º¸ÁõµË´Ï´Ù. ´Ù¸¸, ¶ôÀÇ ±Õµî¼º¿¡ÀÇÇØ thread ½ºÄÉÁÙ¸µÀÇ ±Õµî¼ºÀÌ º¸ÁõµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ÀÌ ¶§¹®¿¡
±Õµî ¶ôÀ» »ç¿ëÇÏ´Â ´Ù¼öÀÇ threadÀÇ 1°³°¡ ¿©·¯ Â÷·Ê ¿¬¼ÓÇØ ÃëµæÇØ, Ȱ¼ºÈµÈ ´Ù¸¥ threadÀÇ ÁøÃ´À» º¸Áö ¸øÇϰí, ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â »óŰ¡ µÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶Ç, ½Ã°£ ÁöÁ¤ÀÌ ¾ø´Â tryLock
¸Þ¼µå´Â ±Õµî ¼³Á¤À» Á¸ÁßÇÏÁö ¾Ê°í, ¹Þ¾ÆµéÀÌÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ thread°¡ ´ë±â ±× Áß¿¡¼ ¶ôÀÌ À¯È¿Çϸé ÀÌ ¸Þ¼µå´Â ¼º°øÇÕ´Ï´Ù.
lock È£ÃâÀÇ Á÷ÈÄ¿¡ try ºí·ÏÀ» °è¼ÓÇÏ´Â °ÍÀÌ, Ç×»ó Ãßõ µÇ°í ÀÖ½À´Ï´Ù. º¸Åë, ´ÙÀ½ÀÇ ±¸ÃàÀ» ½ÇÇàÇϱâ Àü/ÈÄ¿¡ ½ÇÇàÇÕ´Ï´Ù.
class X { private final ReentrantLock lock = new ReentrantLock(); // ... public void m() { lock.lock(); // block until condition holds try { // ... method body } finally { lock.unlock() } } }
ÀÌ Å¬·¡½º´Â Lock
ÀÎÅÍÆäÀ̽ºÀÇ ±¸Çö¿¡ °¡¼¼ÇØisLocked, getLockQueueLength ¹× ÆÄ¾ÇÀ̳ª °¨½Ã¿¡ µµ¿òÀÌ µÇ´Â °ü·Ã protected ¾×¼¼½º ¸Þ¼µå¸¦ Á¤ÀÇÇÕ´Ï´Ù.
ÀÌ Å¬·¡½ºÀÇ Á÷·ÄÈ´Â ºôÆ®ÀÎ ¶ô°ú °°°Ô µ¿ÀÛÇÕ´Ï´Ù. Á÷·ÄÈ ÇØÁ¦µÈ ¶ôÀº Á÷·ÄȽà »óÅ¿¡ °ü°è¾øÀÌ, ¶ô ÇØÁ¦ »óŰ¡ µË´Ï´Ù.
ÀÌ ¶ôÀº 1°³ÀÇ thread·Î ÃÖ´ë 2147483648 Àç±ÍÀû ¶ôÀ» Áö¿ø ÇÕ´Ï´Ù.
»ý¼ºÀÚ °³¿ä | |
---|---|
ReentrantLock ()
ReentrantLock ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù. |
|
ReentrantLock (boolean fair)
ÁöÁ¤µÈ ±Õµî¼º Á¤Ã¥¸¦ »ç¿ëÇØ ReentrantLock ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù. |
¸Þ¼µå °³¿ä | |
---|---|
int |
getHoldCount ()
ÇöÀçÀÇ threadÀÇ, ÀÌ ¶ô¿¡ ´ëÇÑ º¸°ü À¯Áö¼ö¸¦ Á¶È¸ÇÕ´Ï´Ù. |
protected Thread |
getOwner ()
ÇöÀç ÀÌ ¶ôÀ» ¼ÒÀ¯Çϰí ÀÖ´Â thread¸¦ ¸®ÅÏÇÕ´Ï´Ù. |
protected Collection <Thread > |
getQueuedThreads ()
ÀÌ ¶ôÀÇ ÃëµæÀ» ´ë±âÇϰí ÀÖ´Â thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù. |
int |
getQueueLength ()
ÀÌ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù. |
protected Collection <Thread > |
getWaitingThreads (Condition condition)
ÀÌ ¶ô¿¡ °ü·ÃµÈ ÁöÁ¤ »óŸ¦ ´ë±âÁßÀÇ thread¸¦ Æ÷ÇÔÇÑ Ä÷º¼ÇÀ» ¸®ÅÏÇÕ´Ï´Ù. |
int |
getWaitQueueLength (Condition condition)
ÀÌ ¶ô¿¡ °ü·ÃµÈ ÁöÁ¤ »óÅ·Π´ë±âÁßÀÇ threadÀÇ ÃßÁ¤¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù. |
boolean |
hasQueuedThread (Thread thread)
ÁöÁ¤µÈ thread°¡ ÀÌ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀΰ¡ ¾î¶²°¡¸¦ Á¶È¸ÇÕ´Ï´Ù. |
boolean |
hasQueuedThreads ()
ÀÌ ¶ôÀÇ ÃëµæÀ» ´ë±âÁßÀÇ thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. |
boolean |
hasWaiters (Condition condition)
ÀÌ ¶ô¿¡ °ü·ÃµÈ ÁöÁ¤ »óÅ·Π´ë±âÇϰí ÀÖ´Â thread°¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. |
boolean |
isFair ()
ÀÌ ¶ôÀ¸·Î ±Õµî¼ºÀÌ true ·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù. |
boolean |
isHeldByCurrentThread ()
ÇöÀçÀÇ thread°¡ ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÀ»Áö ¾î¶³Áö¸¦ Á¶È¸ÇÕ´Ï´Ù. |
boolean |
isLocked ()
ÀÌ ¶ôÀÌ ¸î°³ÀÇ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ°í ÀÖ´ÂÁö¸¦ Á¶È¸ÇÕ´Ï´Ù. |
void |
lock ()
¶ôÀ» ÃëµæÇÕ´Ï´Ù. |
void |
lockInterruptibly ()
ÇöÀçÀÇ thread°¡ interrupted °¡ ¾Æ´Ñ ÇÑ, ¶ôÀ» ÃëµæÇÕ´Ï´Ù. |
Condition |
newCondition ()
ÀÌ Lock ÀνºÅϽº·Î »ç¿ëÇÏ´Â Condition ÀνºÅϽº¸¦ ¸®ÅÏÇÕ´Ï´Ù. |
String |
toString ()
ÀÌ ¶ôÀ» ½Äº°Çϴ ij¸¯ÅÍ ¶óÀÎ ¹× ¶ô »óŸ¦ ¸®ÅÏÇÕ´Ï´Ù. |
boolean |
tryLock ()
È£Ãâ½Ã¿¡ ´Ù¸¥ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡°Ô¸¸, ¶ôÀ» ÃëµæÇÕ´Ï´Ù. |
boolean |
tryLock (long timeout,
TimeUnit unit)
ÁöÁ¤µÈ ´ë±â ½Ã°£³»¿¡ ´Ù¸¥ thread°¡ ¶ôÀ» º¸°ü À¯ÁöÇÏÁö ¾Ê°í, ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ® °¡ ¹ß»ýÇϰí ÀÖÁö ¾Ê´Â °æ¿ì¿¡
¶ôÀ» ÃëµæÇÕ´Ï´Ù. |
void |
unlock ()
ÀÌ ¶ôÀÇ ÇØ¹æÀ» ½ÃµµÇÕ´Ï´Ù. |
Ŭ·¡½º java.lang. Object ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼µå |
---|
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
»ý¼ºÀÚ »ó¼¼ |
---|
public ReentrantLock()
public ReentrantLock(boolean fair)
fair
- ÀÌ ¶ôÀÌ ±ÕµîÀÎ °æ¿ì´Â true, ±×·¸Áö ¾ÊÀº °æ¿ì´Â false¸Þ¼µåÀÇ »ó¼¼ |
---|
public void lock()
¶ôÀÌ ´Ù¸¥ thread¿¡ º¸°ü À¯ÁöµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì, ±× ¶ôÀ» ÃëµæÇØ Áï½Ã º¹±ÍÇØ, ¶ôÀÇ º¸°ü À¯Áö Ä«¿îÆ®¸¦ 1 À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
ÇöÀçÀÇ thread°¡ ¶ôÀ» ÀÌ¹Ì º¸°ü À¯ÁöÇϰí ÀÖ´Â °æ¿ì, º¸°ü À¯Áö Ä«¿îÆ®ÀÇ °ªÀ» 1 ÁõºÐ ÇØ, ¸Þ¼µå¸¦ Áï½Ã º¹±ÍÇÕ´Ï´Ù.
¶ôÀÌ ´Ù¸¥ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ°í ÀÖ´Â °æ¿ì, ÇöÀçÀÇ thread°¡ thread ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿°¡ µÇ¾î, ¶ôÀÌ ÃëµæµÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù. ¶ôÀÌ ÃëµæµÇ¸é, ¶ô º¸°ü À¯Áö Ä«¿îÆ®°¡ 1 À¸·Î ¼³Á¤µË´Ï´Ù.
Lock
³»ÀÇ lock
public void lockInterruptibly() throws InterruptedException
interrupted
°¡ ¾Æ´Ñ ÇÑ, ¶ôÀ» ÃëµæÇÕ´Ï´Ù.
¶ôÀÌ ´Ù¸¥ thread¿¡ º¸°ü À¯ÁöµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì, ±× ¶ôÀ» ÃëµæÇØ Áï½Ã º¹±ÍÇØ, ¶ôÀÇ º¸°ü À¯Áö Ä«¿îÆ®¸¦ 1 À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
ÇöÀçÀÇ thread°¡ ¶ôÀ» ÀÌ¹Ì º¸°ü À¯ÁöÇϰí ÀÖ´Â °æ¿ì, º¸°ü À¯Áö Ä«¿îÆ®ÀÇ °ªÀ» 1 ÁõºÐ ÇØ, ¸Þ¼µå¸¦ Áï½Ã º¹±ÍÇÕ´Ï´Ù.
¶ôÀÌ ´Ù¸¥ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ°í ÀÖ´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 2°³ Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
ÀÎÅÍ·´Æ®
¸¦ ½Ç½ÃÇÑ´Ù
¶ôÀÌ ÇöÀçÀÇ thread¿¡ ÀÇÇØ ÃëµæµÇ¾úÀ» °æ¿ì, ¶ô º¸°ü À¯Áö Ä«¿îÆ®°¡ 1 À¸·Î ¼³Á¤µË´Ï´Ù.
ÇöÀçÀÇ thread·Î
ÀÎÅÍ·´Æ®
°¡ ¹ß»ýÇßÀ» °æ¿ì,
InterruptedException
ÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® ½ºÅ×ÀÌÅͽº°¡ Ŭ¸®¾î µË´Ï´Ù.
ÀÌ ¸Þ¼µå´Â ¸í½ÃÀûÀÎ ³¢¾îµé¾î Æ÷ÀÎÆ®À̱⠶§¹®¿¡ ÀÌ ±¸Çö¿¡¼´Â º¸Åë ¶Ç´Â ÀçÀÔ °¡´ÉÇÑ ¶ô Ãëµæ¿¡ÀÇ ÀÎÅÍ·´Æ®¿¡ÀÇ ÀÀ´ä¿¡ ³ôÀº ¿ì¼±µµ°¡ ÁÖ¾îÁý´Ï´Ù.
Lock
³»ÀÇ lockInterruptibly
InterruptedException
- ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ìThread.interrupt()
public boolean tryLock()
´Ù¸¥ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡ ¶ôÀ» ÃëµæÇØ, °ª true·Î
Áï½Ã º¹±ÍÇØ ¶ôÀÇ º¸°ü À¯Áö Ä«¿îÆ®¸¦ 1 À¸·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ ¶ôÀÌ ±Õµî ¼ø¼ºÎ Á¤Ã¥¸¦ »ç¿ëÇϵµ·Ï ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì¿¡¼µµ, ¶ôÀÌ »ç¿ë °¡´ÉÇϸé, ´Ù¸¥ thread°¡ ÇöÀç ¶ôÀ» ´ë±âÇϰí ÀÖÀ»Áö ¾î¶³Áö¿¡ °ü°è¾øÀÌ, tryLock()
È£Ãâ·Î °ð¹Ù·Î ¶ôÀÌ ÃëµæµË´Ï´Ù. ÀÌ ¡¸È¹° ¿î¹Ý¼±¡¹µ¿ÀÛ¿¡ ÀÇÇØ ±Õµî¼ºÀÌ ¾ø¾îÁø´Ù°í´Â ¸»ÇÒ ¼ö ÀÖ¾î À̰ÍÀº ƯÁ¤ÀÇ »óȲÇÏ·Î À¯¿ëÇÕ´Ï´Ù. ÀÌ ¶ôÀÇ ±Õµî ¼³Á¤À» Á¸ÁßÇÏ´Â °æ¿ì´Â °ÅÀÇ µî°¡ÀÎ tryLock(0, TimeUnit.SECONDS)
¸¦
»ç¿ëÇÕ´Ï´Ù (À̰͵µ ÀÎÅÍ·´Æ®¸¦ °ËÃâÇÑ´Ù).
ÇöÀçÀÇ thread°¡ ¶ôÀ» ÀÌ¹Ì º¸°ü À¯ÁöÇϰí ÀÖ´Â °æ¿ì, º¸°ü À¯Áö Ä«¿îÆ®ÀÇ °ªÀÌ 1 ÁõºÐ µÇ¾î ¸Þ¼µå´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
¶ôÀÌ ´Ù¸¥ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ°í ÀÖ´Â °æ¿ì, ÀÌ ¸Þ¼µå´Â °ª false·Î Áï½Ã º¹±ÍÇÕ´Ï´Ù.
Lock
³»ÀÇ tryLock
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
ÀÎÅÍ·´Æ®
°¡ ¹ß»ýÇϰí ÀÖÁö ¾Ê´Â °æ¿ì¿¡
¶ôÀ» ÃëµæÇÕ´Ï´Ù.
´Ù¸¥ thread°¡ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ¶ôÀ» ÃëµæÇØ, °ª true·Î
Áï½Ã º¹±ÍÇØ, ¶ô º¸°ü À¯Áö Ä«¿îÆ®¸¦ 1 À¸·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ ¶ôÀÌ ±Õµî ¼ø¼ºÎ Á¤Ã¥¸¦ »ç¿ëÇϵµ·Ï ¼³Á¤µÇ¾î À־, ´Ù¸¥ thread°¡ ÇöÀç ¶ôÀ» ´ë±âÇϰí ÀÖ´Â °æ¿ì´Â »ç¿ë °¡´ÉÇÑ ¶ôÀº ÃëµæµÇÁö ¾Ê½À´Ï´Ù. À̰ÍÀº, tryLock()
¸Þ¼µå¿Í´Â ´ëÁ¶ÀûÀÔ´Ï´Ù. ±Õµî ¶ô¿¡ ´ëÇÑ È¹° ¿î¹Ý¼±À» Çã°¡ÇÏÁö ¾Ê´Â ½Ã°£ ¼³Á¤µÈ tryLock¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â ½Ã°£ ¼³Á¤°ú ºñ½Ã°£ ¼³Á¤ÀÇ ¾çÇü½ÄÀ» Á¶ÇÕÇØ »ç¿ëÇÕ´Ï´Ù.
if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
ÇöÀçÀÇ thread°¡ ¶ôÀ» ÀÌ¹Ì º¸°ü À¯ÁöÇϰí ÀÖ´Â °æ¿ì, º¸°ü À¯Áö Ä«¿îÆ®ÀÇ °ªÀÌ 1 ÁõºÐ µÇ¾î ¸Þ¼µå´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù.
¶ôÀÌ ´Ù¸¥ thread¿¡ ÀÇÇØ º¸°ü À¯ÁöµÇ°í ÀÖ´Â °æ¿ì, ÇöÀçÀÇ thread´Â threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 3 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
ÀÎÅÍ·´Æ®
¸¦ ½Ç½ÃÇÑ´Ù
¶ôÀÌ ÃëµæµÇ¾úÀ» °æ¿ì, °ª true°¡ µ¹·ÁÁÖ°íÁ® ¶ô º¸°ü À¯Áö Ä«¿îÆ®°¡ 1 À¸·Î ¼³Á¤µË´Ï´Ù.
ÇöÀçÀÇ thread·Î
ÀÎÅÍ·´Æ®
°¡ ¹ß»ýÇßÀ» °æ¿ì,
InterruptedException
ÀÌ Throw µÇ¾î ÇöÀçÀÇ threadÀÇ ÀÎÅÍ·´Æ® ½ºÅ×ÀÌÅͽº°¡ Ŭ¸®¾î µË´Ï´Ù.
ÁöÁ¤µÈ ´ë±â ½Ã°£ÀÌ °æ°úÇϸé, °ª false°¡ ¸®Åϵ˴ϴ٠. ½Ã°£ÀÌ Á¦·Î ¶Ç´Â ±×°Íº¸´Ù ÀÛÀº °æ¿ì, ¸Þ¼µå´Â ´ë±âÇÏÁö ¾Ê½À´Ï´Ù.
ÀÌ ¸Þ¼µå´Â ¸í½ÃÀûÀÎ ³¢¾îµé¾î Æ÷ÀÎÆ®À̱⠶§¹®¿¡ ÀÌ ±¸Çö¿¡¼´Â º¸Åë ¶Ç´Â ÀçÀÔ °¡´ÉÇÑ ¶ô Ãëµæ ¹× ´ë±â ½Ã°£ °æ°ú ¸®Æ÷Æ®¿¡ÀÇ ÀÎÅÍ·´Æ®¿¡ ´ëÇÑ ÀÀ´ä¿¡ ³ôÀº ¿ì¼±µµ°¡ ÁÖ¾îÁý´Ï´Ù.
Lock
³»ÀÇ tryLock
timeout
- ¶ôÀ» ´ë±âÇÏ´Â ½Ã°£unit
- timeout ÀμöÀÇ ½Ã°£ ´ÜÀ§
InterruptedException
- ÇöÀçÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» °æ¿ì
NullPointerException
- ´ÜÀ§°¡ nullÀÎ °æ¿ìThread.interrupt()
public void unlock()
ÇöÀçÀÇ thread°¡ ÀÌ ¶ôÀÇ È¦´õÀÎ °æ¿ì, º¸°ü À¯Áö Ä«¿îÆ®ÀÇ °ªÀÌ ÁÙ¿©Áý´Ï´Ù. º¸°ü À¯Áö Ä«¿îÆ®°¡ Á¦·Î°¡ µÇ¸é, ¶ôÀÌ ÇØ¹æµË´Ï´Ù. ÇöÀçÀÇ thread°¡ ÀÌ ¶ôÀÇ È¦´õ°¡ ¾Æ´Ñ °æ¿ì, IllegalMonitorStateException
À» ¹ß»ý½Ãŵ´Ï´Ù.
Lock
³»ÀÇ unlock
IllegalMonitorStateException
- ÇöÀçÀÇ thread°¡ ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇÏÁö ¾Ê´Â °æ¿ìpublic Condition newCondition()
Lock
ÀνºÅϽº·Î »ç¿ëÇÏ´Â Condition
ÀνºÅϽº¸¦ ¸®ÅÏÇÕ´Ï´Ù.
¸®ÅϵÈ
Condition
ÀνºÅϽº´Â Object
°¨½Ã ¸Þ¼µå (wait
,
notify
¹× notifyAll
)¸¦ ºôÆ®ÀÎ °¨½Ã ¶ôÀ¸·Î »ç¿ëÇÏ´Â °æ¿ì¿Í °°Àº »ç¿ë ¹æ¹ýÀ» Áö¿ø
ÇÕ´Ï´Ù.
Condition
´ë±â
¶Ç´Â½ÅÈ£ ¼Û½Å
¸Þ¼µåÀÇ ¾î´À ÂÊÀÎÁö°¡ ºÒ·Á °¬À» ¶§¿¡ ÀÌ ¶ôÀÌ º¸°ü À¯ÁöµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì, IllegalMonitorStateException
ÀÌ Throw µÈ´Ù
´ë±â
¸Þ¼µå°¡ ºÒ·Á°¡
¸é, ¶ôÀÌ ÇØ¹æµÈ´Ù. ±× ÈÄ, ¶ôÀÌ ÀçÃëµæµÇ¾î ¶ô º¸°ü À¯Áö Ä«¿îÆ®°¡ ¸Þ¼µåÀÇ È£Ãâ½Ã »óÅ¿¡ º¹¿øµÇ°í ³ª¼, ¸Þ¼µå°¡ º¹±ÍÇÑ´Ù
ÀÎÅÍ·´Æ®
°¡ ¹ß»ýÇϸé, ´ë±â´Â Á¾·áÇØ, InterruptedException
ÀÌ Throw µÇ¾î threadÀÇ ÀÎÅÍ·´Æ® »óŰ¡ Ŭ¸®¾î µÈ´Ù
Lock
³»ÀÇ newCondition
public int getHoldCount()
thread¿¡´Â ¶ô ÇØÁ¦ ¾×¼Ç°ú ÀÏÄ¡ÇÏÁö ¾Ê´Â ¶ô ¾×¼Ç ¸¶´Ù, ¶ô º¸°ü À¯Áö°¡ Á¸ÀçÇÕ´Ï´Ù.
º¸Åë, º¸°ü À¯Áö Ä«¿îÆ® Á¤º¸´Â Å×½ºÆ® ¹× µð¹ö±×¿ëÀ¸·Î¸¸ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î ¶ôÀ» º¸°ü À¯ÁöÇÑ »óÅ·ΠƯÁ¤ÀÇ ÄÚµå ¼½¼Ç¿¡ µé¾î°¡¼´Â ¾È µÇ´Â °æ¿ì, ±×°ÍÀ» ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³À´Ï´Ù.
class X { ReentrantLock lock = new ReentrantLock(); // ... public void m() { assert lock.getHoldCount() == 0; lock.lock(); try { // ... method body } finally { lock.unlock(); } } }
public boolean isHeldByCurrentThread()
ºôÆ®ÀÎ °¨½Ã ¶ô¿ëÀÇ Thread.holdsLock(java.lang.Object)
¸Þ¼µå¿Í °°ÀÌ, ÀÌ ¸Þ¼µå´Â º¸Åë, µð¹ö±× ¹× Å×½ºÆ®¿¡ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î
¶ôÀÌ º¸°ü À¯ÁöµÇ°í ÀÖ´Â °æ¿ì¿¡°Ô¸¸ È£ÃâÇÒ Çʿ䰡 ÀÖ´Â ¸Þ¼µå´Â ±×°ÍÀ» ´ÙÀ½°ú °°ÀÌ °¡¸®Å³ ¼ö°¡ ÀÖ½À´Ï´Ù.
class X { ReentrantLock lock = new ReentrantLock(); // ... public void m() { assert lock.isHeldByCurrentThread(); // ... method body } }
ÀçÀÔ °¡´ÉÇÑ ¶ôÀÌ ÀçÀÔ ºÒ°¡´ÉÇÑ ¹æ¹ýÀ¸·Î È®½ÇÈ÷ »ç¿ëµÇµµ·Ï ÇÏ´Â °æ¿ì¿¡µµ, À̰ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
class X { ReentrantLock lock = new ReentrantLock(); // ... public void m() { assert ! lock.isHeldByCurrentThread(); lock.lock(); try { // ... method body } finally { lock.unlock(); } } }
public boolean isLocked()
public final boolean isFair()
protected Thread getOwner()
public final boolean hasQueuedThreads()
public final boolean hasQueuedThread(Thread thread)
thread
- thread
NullPointerException
- thread°¡ nullÀÎ °æ¿ìpublic final int getQueueLength()
protected Collection <Thread > getQueuedThreads()
public boolean hasWaiters(Condition condition)
condition
- »óÅÂ
IllegalMonitorStateException
- ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì
IllegalArgumentException
- ÁöÁ¤µÈ »óŰ¡ ÀÌ ¶ô°ú °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException
- »óŰ¡ nullÀÎ °æ¿ìpublic int getWaitQueueLength(Condition condition)
condition
- »óÅÂ
IllegalMonitorStateException
- ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì
IllegalArgumentException
- ÁöÁ¤µÈ »óŰ¡ ÀÌ ¶ô°ú °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException
- »óŰ¡ nullÀÎ °æ¿ìprotected Collection <Thread > getWaitingThreads(Condition condition)
condition
- »óÅÂ
IllegalMonitorStateException
- ÀÌ ¶ôÀ» º¸°ü À¯ÁöÇϰí ÀÖÁö ¾Ê´Â °æ¿ì
IllegalArgumentException
- ÁöÁ¤µÈ »óŰ¡ ÀÌ ¶ô°ú °ü·ÃÁöÀ» ¼ö ÀÖÁö ¾ÊÀº °æ¿ì
NullPointerException
- »óŰ¡ nullÀÎ °æ¿ìpublic String toString()
Thread.getName()
°¡ Æ÷ÇԵ˴ϴÙ.
Object
³»ÀÇ toString
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
ÀÌÀü Ŭ·¡½º ´ÙÀ½ Ŭ·¡½º | ÇÁ·¹ÀÓÀ¸·Î ÇÁ·¹ÀÓ ¾øÀÌ | |||||||||
°³¿ä: NESTED | Çʵå | constructor | ¸Þ¼µå | »ó¼¼: Çʵå | »ý¼ºÀÚ | ¸Þ¼µå |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ ÂüÁ¶ÇϽʽÿÀ.