JavaTM 2 Platform
Standard Ed. 5.0

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ÀÇ Ã¹È¸ park ¿øÀÎÀÌ µÈ »óŸ¦ ÀçüũÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. È£ÃâÃøÀº º¹±Í½ÃÀÇ threadÀÇ ÀÎÅÍ·´Æ® »óŵ ÆÇÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.


parkNanos

public static void parkNanos(long nanos)
ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì¸¦ Á¦¿ÜÇØ, ÇöÀçÀÇ thread¸¦, ÁöÁ¤µÈ ´ë±â ½Ã°£±îÁö thread ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿·Î ÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÑ °æ¿ì, ÀÌ°ÍÀº ¼ÒºñµÇ¾î È£ÃâÀº Áï½Ã º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, ÇöÀçÀÇ thread´Â thread ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 4 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â ÀÌ·¯ÇÑ ¾î¶² °ÍÀÌ ¸Þ¼­µå º¹±ÍÀÇ ¿øÀÎÀÌ µÇ¾ú´Â°¡´Â ¸®Æ÷Æ®ÇÏÁö ¾Ê½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ Ã¹È¸ park ¿øÀÎÀÌ µÈ »óŸ¦ ÀçüũÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ ÀÎÅÍ·´Æ® »óųª, º¹±Í½ÃÀÇ °æ°ú½Ã°£µîµµ ÆÇÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
nanos - ´ë±âÇÏ´Â ÃÖ´ë ³ª³ëÃʼö

parkUntil

public static void parkUntil(long deadline)
ÆÄ ¹ÌÆ®°¡ ÀÌ¿ë °¡´ÉÇÏÁö ¾ÊÀº °æ¿ì, ÁöÁ¤µÈ ±âÇѱîÁö, threadÀÇ ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ÇöÀçÀÇ thread¸¦ ¹«È¿·Î ÇÕ´Ï´Ù.

ÆÄ ¹ÌÆ®°¡ »ç¿ë °¡´ÉÇÑ °æ¿ì, ÀÌ°ÍÀº ¼ÒºñµÇ¾î È£ÃâÀº Áï½Ã º¹±ÍÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì, ÇöÀçÀÇ thread´Â thread ½ºÄÉÁÙ¸µ¿¡ °üÇؼ­ ¹«È¿°¡ µÇ¾î, ´ÙÀ½ÀÇ 4 °³Áß ÇÑÂÊÀÌ ÀϾ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.

ÀÌ ¸Þ¼­µå´Â ÀÌ·¯ÇÑ ¾î¶² °ÍÀÌ ¸Þ¼­µå º¹±ÍÀÇ ¿øÀÎÀÌ µÇ¾ú´Â°¡´Â ¸®Æ÷Æ®ÇÏÁö ¾Ê½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ Ã¹È¸ park ¿øÀÎÀÌ µÈ »óŸ¦ ÀçüũÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. È£ÃâÃøÀº threadÀÇ ÀÎÅÍ·´Æ® »óųª, º¹±Í½ÃÀÇ ÇöÀç ½Ã°¢µîµµ ÆÇÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÆĶó¹ÌÅÍ:
deadline - ´ë±â¿ëÀÇ, ½Å±â¿øÀ¸·ÎºÎÅÍÀÇ ¹Ð¸® ¼¼ÄÁµå ´ÜÀ§ÀÇ Àý´ë ½Ã°£

JavaTM 2 Platform
Standard Ed. 5.0

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