java.util.concurrent.locks
Ŭ·¡½º LockSupport
java.lang.Object
java.util.concurrent.locks.LockSupport
public class LockSupport
- extends Object
¶ô ¹× ´Ù¸¥ µ¿±â Ŭ·¡½º¸¦ ÀÛ¼ºÇϱâ À§ÇÑ,
±âº»ÀûÀÎ thread ºí·Ï ¿ø½ÃÀû
ÀÌ Å¬·¡½º´Â ±×°ÍÀ» »ç¿ëÇÏ´Â °¢ thread¿Í ÆÄ ¹ÌÆ®¸¦ (Semaphore
Ŭ·¡½º¶ó°í ÇÏ´Â ¹Ì·Î) °ü·ÃÁþ½À´Ï´Ù. ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì, park
È£ÃâÀº Áï½Ã º¹±ÍÇØ, ÇÁ·Î¼¼½º³»¿¡¼ ÆÄ ¹ÌÆ®¸¦ ¼ÒºñÇÕ´Ï´Ù. ÆÄ ¹ÌÆ®¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Â °æ¿ì´Â ºí·ÏÀÌ °¡´ÉÇÕ´Ï´Ù. unpark
È£Ãâ¿¡ÀÇÇØ ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì¿¡´Â ÀÌ¿ë °¡´ÉÇÏ°Ô µË´Ï´Ù (´Ù¸¸, Semaphore °ú´Â ´Þ¸®, ÆÄ ¹ÌÆ®¿¡¼´Â ´©ÀûÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù. ÃÖ´ë·Î 1°³
¸¸ÀÌ Á¸ÀçÇÑ´Ù).
park ¹× unpark ¸Þ¼µå´Â ºñÃßõ ¸Þ¼µå Thread.suspend ¹× Thread.resume¸¦ »ç¿ë ºÒ°¡´ÉÀ¸·Î ÇÏ´Â °Í °°Àº ¹®Á¦¿¡ Á¶¿ìÇÏÁö ¾Ê´Â thread¸¦ ºí·Ï ¹× ºí·Ï ÇØÁ¦ÇÏ´Â È¿À²ÀûÀÎ ¼ö´ÜÀ» Á¦°øÇÕ´Ï´Ù. park¸¦ È£ÃâÇÏ´Â thread ¹× unpark¸¦ ½ÃµµÇÏ´Â ´Ù¸¥ thread°£ÀÇ °æÇÕÀº ÆÄ ¹ÌÆ®¸¦ À§Çؼ Ȱ¹ßÇÑ »óŸ¦ À¯ÁöÇÕ´Ï´Ù. ¶Ç, È£ÃâÃøÀÇ thread·Î ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇØ, ÇÑÆí ŸÀÓ ¾Æ¿ô ¹öÀüÀÌ Áö¿ø
µÇ°í ÀÖ´Â °æ¿ì, park´Â º¹±ÍÇÕ´Ï´Ù. park ¸Þ¼µå´Â ¡¸ÀÌÀ¯¾øÀÌ¡¹¾ðÁ¦ º¹±ÍÇÏ´Â Àϵµ °¡´ÉÇϱ⠶§¹®¿¡
ÀϹÝÀûÀ¸·Î º¹±Í½Ã¿¡ »óŸ¦ ÀçüũÇÏ´Â ·çÇÁ³»¿¡¼ È£ÃâÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ
¹Ì·Îpark´Â ½ºÇÉ¿¡ ½Ã°£À» ³¶ºñÇÏ´Â °ÍÀ» ȸÇÇÇÏ´Â ÃÖÀûÈµÈ ¡¸Busy ¿þÀÌÆ®¡¹·Î¼ ±â´ÉÇÕ´Ï´Ù¸¸, È¿°ú¸¦ ¹ßÈÖÇϱâ À§Çؼ´Â unpark¿Í
Æä¾î·Î »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ¸Þ¼µå´Â °íµµÀÇ µ¿±â À¯Æ¿¸®Æ¼ÀÇ ÀÛ¼º¿ë Åø·Î¼ »ç¿ëÇϵµ·Ï ¼³°èµÇ°í ÀÖ¾î ±× ÀÚü¿¡¼´Â ´ëü·ÎÀÇ µ¿½Ã Á¦¾î ¾îÇø®ÄÉÀ̼ǿ¡¼´Â À¯¿ëÇÏÁö´Â ¾Ê½À´Ï´Ù.
»ç¿ë¿¹. ÀÌÇÏ¿¡
¼±ÀÔó ¹æÆíÀ¸·Î ÀçÀÔ ºÒ°¡´ÉÇÑ ¶ô Ŭ·¡½ºÀÇ °³·«À» ³ªÅ¸³À´Ï´Ù.
class FIFOMutex {
private AtomicBoolean locked = new AtomicBoolean(false);
private Queue<Thread> waiters = new ConcurrentLinkedQueue<Thread>();
public void lock() {
boolean wasInterrupted = false;
Thread current = Thread.currentThread();
waiters.add(current);
// Block while not first in queue or cannot acquire lock
while (waiters.peek() ! = current ||
! locked.compareAndSet(false, true)) {
LockSupport.park();
if (Thread.interrupted()) // ignore interrupts while waiting
wasInterrupted = true;
}
waiters.remove();
if (wasInterrupted) // reassert interrupt status on exit
current.interrupt();
}
public void unlock() {
locked.set(false);
LockSupport.unpark(waiters.peek());
}
}
¸Þ¼µå °³¿ä |
static void |
park ()
ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì, threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ÇöÀçÀÇ thread¸¦ ¹«È¿·Î ÇÕ´Ï´Ù. |
static void |
parkNanos (long nanos)
ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¸¦ Á¦¿ÜÇØ, ÇöÀçÀÇ thread¸¦, ÁöÁ¤µÈ ´ë±â ½Ã°£±îÁö thread ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿·Î ÇÕ´Ï´Ù. |
static void |
parkUntil (long deadline)
ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì, ÁöÁ¤µÈ ±âÇѱîÁö, threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ÇöÀçÀÇ thread¸¦ ¹«È¿·Î ÇÕ´Ï´Ù. |
static void |
unpark (Thread thread)
ÁöÁ¤µÈ threadÀÇ ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì¿¡
»ç¿ë °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. |
Ŭ·¡½º java.lang. Object ·ÎºÎÅÍ »ó¼ÓµÈ ¸Þ¼µå |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
unpark
public static void unpark(Thread thread)
- ÁöÁ¤µÈ threadÀÇ ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì¿¡
»ç¿ë °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. thread°¡ park·Î
ºí·Ï µÇ¾úÀ» °æ¿ì¿¡
ºí·ÏÀ» ÇØÁ¦ÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, ´ÙÀ½ÀÇ park
È£ÃâÀÌ ºí·Ï ÇÏÁö ¾Ê´Â °ÍÀÌ º¸ÁõµË´Ï´Ù. ÁöÁ¤µÈ thread°¡ ½ÃÀÛÇϰí ÀÖÁö ¾Ê´Â °æ¿ì, ÀÌ Á¶ÀÛÀÇ È¿°ú´Â ÀÏÀý º¸ÁõµÇÁö ¾Ê½À´Ï´Ù.
- ÆÄ¶ó¹ÌÅÍ:
thread
- unpark¸¦ ½ÇÇàÇÏ´Â thread ¶Ç´Â null. nullÀÎ °æ¿ì, ÀÌ Á¶ÀÛ¿¡´Â ¾Æ¹« È¿°úµµ ¾ø´Ù
park
public static void park()
- ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì, threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ÇöÀçÀÇ thread¸¦ ¹«È¿·Î ÇÕ´Ï´Ù.
ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÑ °æ¿ì, À̰ÍÀº ¼ÒºñµÇ¾î È£ÃâÀº Áï½Ã º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, ÇöÀçÀÇ thread´Â thread ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 3 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
- ´Ù¸¥ thread°¡ ÇöÀçÀÇ thread¸¦ Ÿ°ÙÀ¸·Î¼ unpark¸¦ È£ÃâÇÑ´Ù
- ´Ù¸¥ thread°¡ ÇöÀçÀÇ thread¿¡
ÀÎÅÍ·´Æ®
¸¦ ½Ç½ÃÇÑ´Ù - È£ÃâÀÌ, ¿Ü°üÀ¸·Î (ÀÌÀ¯µµ ¾ø°Ô) º¹±ÍÇÑ´Ù
ÀÌ ¸Þ¼µå´Â ÀÌ·¯ÇÑ ¾î¶² °ÍÀÌ ¸Þ¼µå º¹±ÍÀÇ ¿øÀÎÀÌ µÇ¾ú´Â°¡´Â ¸®Æ÷Æ®ÇÏÁö ¾Ê½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ Ã¹È¸ park
¿øÀÎÀÌ µÈ »óŸ¦ ÀçüũÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. È£ÃâÃøÀº º¹±Í½ÃÀÇ threadÀÇ ÀÎÅÍ·´Æ® »óŵ ÆÇÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
parkNanos
public static void parkNanos(long nanos)
- ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¸¦ Á¦¿ÜÇØ, ÇöÀçÀÇ thread¸¦, ÁöÁ¤µÈ ´ë±â ½Ã°£±îÁö thread ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿·Î ÇÕ´Ï´Ù.
ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÑ °æ¿ì, À̰ÍÀº ¼ÒºñµÇ¾î È£ÃâÀº Áï½Ã º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, ÇöÀçÀÇ thread´Â thread ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 4 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
- ´Ù¸¥ thread°¡ ÇöÀçÀÇ thread¸¦ Ÿ°ÙÀ¸·Î¼ unpark¸¦ È£ÃâÇÑ´Ù
- ´Ù¸¥ thread°¡ ÇöÀçÀÇ thread¿¡
ÀÎÅÍ·´Æ®
¸¦ ½Ç½ÃÇÑ´Ù - ÁöÁ¤µÈ ´ë±â ½Ã°£ÀÌ °æ°úÇÑ´Ù
- È£ÃâÀÌ, ¿Ü°üÀ¸·Î (ÀÌÀ¯µµ ¾ø°Ô) º¹±ÍÇÑ´Ù
ÀÌ ¸Þ¼µå´Â ÀÌ·¯ÇÑ ¾î¶² °ÍÀÌ ¸Þ¼µå º¹±ÍÀÇ ¿øÀÎÀÌ µÇ¾ú´Â°¡´Â ¸®Æ÷Æ®ÇÏÁö ¾Ê½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ Ã¹È¸ park
¿øÀÎÀÌ µÈ »óŸ¦ ÀçüũÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ ÀÎÅÍ·´Æ® »óųª, º¹±Í½ÃÀÇ °æ°ú½Ã°£µîµµ ÆÇÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
- ÆÄ¶ó¹ÌÅÍ:
nanos
- ´ë±âÇÏ´Â ÃÖ´ë ³ª³ëÃʼö
parkUntil
public static void parkUntil(long deadline)
- ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì, ÁöÁ¤µÈ ±âÇѱîÁö, threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ÇöÀçÀÇ thread¸¦ ¹«È¿·Î ÇÕ´Ï´Ù.
ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÑ °æ¿ì, À̰ÍÀº ¼ÒºñµÇ¾î È£ÃâÀº Áï½Ã º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, ÇöÀçÀÇ thread´Â thread ½ºÄÉÁÙ¸µ¿¡ °üÇØ¼ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 4 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
- ´Ù¸¥ thread°¡ ÇöÀçÀÇ thread¸¦ Ÿ°ÙÀ¸·Î¼ unpark¸¦ È£ÃâÇÑ´Ù
- ´Ù¸¥ thread°¡ ÇöÀçÀÇ thread¿¡
ÀÎÅÍ·´Æ®
¸¦ ½Ç½ÃÇÑ´Ù - ÁöÁ¤µÈ ±âÇÑÀÌ °æ°úÇÑ´Ù
- È£ÃâÀÌ, ¿Ü°üÀ¸·Î (ÀÌÀ¯µµ ¾ø°Ô) º¹±ÍÇÑ´Ù
ÀÌ ¸Þ¼µå´Â ÀÌ·¯ÇÑ ¾î¶² °ÍÀÌ ¸Þ¼µå º¹±ÍÀÇ ¿øÀÎÀÌ µÇ¾ú´Â°¡´Â ¸®Æ÷Æ®ÇÏÁö ¾Ê½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ Ã¹È¸ park
¿øÀÎÀÌ µÈ »óŸ¦ ÀçüũÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ ÀÎÅÍ·´Æ® »óųª, º¹±Í½ÃÀÇ ÇöÀç ½Ã°¢µîµµ ÆÇÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
- ÆÄ¶ó¹ÌÅÍ:
deadline
- ´ë±â¿ëÀÇ, ½Å±â¿øÀ¸·ÎºÎÅÍÀÇ ¹Ð¸® ¼¼ÄÁµå ´ÜÀ§ÀÇ Àý´ë ½Ã°£
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ
ÂüÁ¶ÇϽʽÿÀ.