|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.util.concurrent.locks.LockSupport
public class LockSupport
락 및 다른 동기 클래스를 작성하기 위한 , 기본적인 thread 블록 프리미티브(primitive)입니다.
이 클래스는, 그것을 사용하는 각 thread와 허가(permit)를 (Semaphore
클래스라고 하는 의미로) 관련짓습니다. 허가(permit)가 이용 가능한 경우,park
의 호출은 즉시 복귀해, 프로세스내에서 허가(permit)를 소비합니다. 허가(permit)를 이용할 수 없는 경우는, 블록이 가능합니다. unpark
의 호출에 의해, 허가(permit)가 이용 가능하지 않은 경우는 이용 가능하게 됩니다. 다만, Semaphore 과는 달리, 허가(permit)에서는 누적은 실행되지 않고, 최대로 1 개 밖에 존재하지 않습니다.
park
및 unpark
메소드는, 비추천 메소드 Thread.suspend
및 Thread.resume
를 사용 불능으로 하는 것 같은 문제에 조우하지 않는 thread를 블록 및 블록 해제하는 효율적인 수단을 제공합니다. park
를 호출하는 thread 및 unpark
를 시도하는 다른 thread간의 경합은, 허가(permit)를 위해서(때문에) 활발한 상태를 유지합니다. 또, 호출측의 thread로 인터럽트가 발생해, 한편 타임 아웃 버젼이 지원되고 있는 경우,park
는 복귀합니다. park
메소드는, 「이유없이」언제 복귀하는 일도 가능하기 때문에, 일반적으로, 복귀시에 상태를 재체크하는 루프내에서 호출할 필요가 있습니다. 이 의미로,park
는 스핀에 시간을 낭비하는 것을 회피하는 최적화된 「Busy 웨이트」로서 기능합니다만, 효과를 발휘하기 위해서는 unpark
와 페어로 사용할 필요가 있습니다.
park
의 3 개의 형식의 각각에서도,blocker
객체 파라미터를 지원합니다. thread가 블록 되는 곳의 객체가 기록되기 (위해)때문에, 감시 및 진단 툴로 thread가 블록 된 이유를 특정할 수가 있는 (이러한 툴은,getBlocker(java.lang.Thread)
메소드를 사용해 브록카에 액세스 할 수 있습니다). 이 파라미터를 지정하지 않는 원의 형식은 아니고 이러한 형식을 사용하는 것을 강하게 추천합니다. 락 구현내의 blocker
로서 지정되는 일반적으로의 인수는,this
입니다.
이러한 메소드는, 고도의 동기 유틸리티의 작성용 툴로서 사용하도록(듯이) 설계되고 있어 그 자체에서는, 대부분의 동시 제어 어플리케이션에서는 유용하지는 않습니다. park
메소드는, 다음의 형식에서만 사용하도록(듯이) 설계되고 있습니다.
while (! canProceed()) { ... LockSupport.park(this); }
canProceed
도,park
의 호출전에 행해지는 그 외의 액션도, 락 또는 블록을 수반하지 않습니다. 각 thread에 관련지을 수 있는 허가(permit)는 1 개 뿐이기 (위해)때문에,park
를 중간적으로 사용하면(자), 의도한 효과와 간섭하는 일이 있습니다.
사용예. 다음에, 선입선출으로 재입 불가능한 락 클래스의 개략을 나타냅니다.
class FIFOMutex {
private final AtomicBoolean locked = new AtomicBoolean(false);
private final 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(this);
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 Object |
getBlocker (Thread t)
아직 블록 해제되어 있지 않은 park 메소드의 최신의 호출로 지정된 브록카객체를 돌려줍니다. |
static void |
park ()
허가(permit)가 이용 가능하지 않은 경우, thread의 스케줄링에 관해서 현재의 thread를 무효로 합니다. |
static void |
park (Object blocker)
허가(permit)가 이용 가능하지 않은 경우, thread의 스케줄링에 관해서 현재의 thread를 무효로 합니다. |
static void |
parkNanos (long nanos)
허가(permit)가 이용 가능한 경우를 제외해, 현재의 thread를, 지정된 대기 시간까지 thread 스케줄링에 관해서 무효로 합니다. |
static void |
parkNanos (Object blocker,
long nanos)
허가(permit)가 이용 가능한 경우를 제외해, 현재의 thread를, 지정된 대기 시간까지 thread 스케줄링에 관해서 무효로 합니다. |
static void |
parkUntil (long deadline)
허가(permit)가 이용 가능하지 않은 경우, 지정된 기한까지, thread의 스케줄링에 관해서 현재의 thread를 무효로 합니다. |
static void |
parkUntil (Object blocker,
long deadline)
허가(permit)가 이용 가능하지 않은 경우, 지정된 기한까지, thread의 스케줄링에 관해서 현재의 thread를 무효로 합니다. |
static void |
unpark (Thread thread)
지정된 thread의 허가(permit)가 사용 가능하지 않은 경우에, 사용 가능하게 합니다. |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
메소드의 상세 |
---|
public static void unpark(Thread thread)
park
로 블록 되었을 경우에, 블록을 해제합니다. 그 이외의 경우, 다음의 park
의 호출이 블록 하지 않는 것이 보증됩니다. 지정된 thread가 기동하고 있지 않는 경우, 이 조작의 효과는 일절 보증되지 않습니다.
thread
- unpark 를 실행하는 thread 또는 null
. null
의 경우, 이 조작에는 아무 효과도 없다public static void park(Object blocker)
허가(permit)가 사용 가능한 경우, 이것은 소비되어 호출은 즉시 복귀합니다. 그 이외의 경우, 현재의 thread는, thread 스케줄링에 관해서 무효가 되어, 다음의 3 개중 한쪽이 일어날 때까지 대기합니다.
unpark
를 호출한다.
이 메소드는, 이러한 어떤 것이 메소드 복귀의 원인이 되었는가는 리포트하지 않습니다. 호출측은, thread의 첫회 park 의 원인이 된 상태를 재체크할 필요가 있습니다. 호출측은, 복귀시의 thread의 인터럽트 상태등도 판정할 수 있습니다.
blocker
- 이 thread의 park 를 실시하는 동기 객체public static void parkNanos(Object blocker, long nanos)
허가(permit)가 사용 가능한 경우, 이것은 소비되어 호출은 즉시 복귀합니다. 그 이외의 경우, 현재의 thread는, thread 스케줄링에 관해서 무효가 되어, 다음의 4 개중 한쪽이 일어날 때까지 대기합니다.
unpark
를 호출한다.
이 메소드는, 이러한 어떤 것이 메소드 복귀의 원인이 되었는가는 리포트하지 않습니다. 호출측은, thread의 첫회 park 의 원인이 된 상태를 재체크할 필요가 있습니다. 호출측은, thread의 인터럽트 상태나, 복귀시의 경과시간등도 판정할 수 있습니다.
blocker
- 이 thread의 park 를 실시하는 동기 객체nanos
- 대기하는 최대 나노초수public static void parkUntil(Object blocker, long deadline)
허가(permit)가 사용 가능한 경우, 이것은 소비되어 호출은 즉시 복귀합니다. 그 이외의 경우, 현재의 thread는, thread 스케줄링에 관해서 무효가 되어, 다음의 4 개중 한쪽이 일어날 때까지 대기합니다.
unpark
를 호출한다.
이 메소드는, 이러한 어떤 것이 메소드 복귀의 원인이 되었는가는 리포트하지 않습니다. 호출측은, thread의 첫회 park 의 원인이 된 상태를 재체크할 필요가 있습니다. 호출측은, thread의 인터럽트 상태나, 복귀시의 현재 시각등도 판정할 수 있습니다.
blocker
- 이 thread의 park 를 실시하는 동기 객체deadline
- 대기용의, 신기원으로부터의 밀리 세컨드 단위의 절대 시간public static Object getBlocker(Thread t)
public static void park()
허가(permit)가 사용 가능한 경우, 이것은 소비되어 호출은 즉시 복귀합니다. 그 이외의 경우, 현재의 thread는, thread 스케줄링에 관해서 무효가 되어, 다음의 3 개중 한쪽이 일어날 때까지 대기합니다.
unpark
를 호출한다.
이 메소드는, 이러한 어떤 것이 메소드 복귀의 원인이 되었는가는 리포트하지 않습니다. 호출측은, thread의 첫회 park 의 원인이 된 상태를 재체크할 필요가 있습니다. 호출측은, 복귀시의 thread의 인터럽트 상태등도 판정할 수 있습니다.
public static void parkNanos(long nanos)
허가(permit)가 사용 가능한 경우, 이것은 소비되어 호출은 즉시 복귀합니다. 그 이외의 경우, 현재의 thread는, thread 스케줄링에 관해서 무효가 되어, 다음의 4 개중 한쪽이 일어날 때까지 대기합니다.
unpark
를 호출한다.
이 메소드는, 이러한 어떤 것이 메소드 복귀의 원인이 되었는가는 리포트하지 않습니다. 호출측은, thread의 첫회 park 의 원인이 된 상태를 재체크할 필요가 있습니다. 호출측은, thread의 인터럽트 상태나, 복귀시의 경과시간등도 판정할 수 있습니다.
nanos
- 대기하는 최대 나노초수public static void parkUntil(long deadline)
허가(permit)가 사용 가능한 경우, 이것은 소비되어 호출은 즉시 복귀합니다. 그 이외의 경우, 현재의 thread는, thread 스케줄링에 관해서 무효가 되어, 다음의 4 개중 한쪽이 일어날 때까지 대기합니다.
unpark
를 호출한다.
이 메소드는, 이러한 어떤 것이 메소드 복귀의 원인이 되었는가는 리포트하지 않습니다. 호출측은, thread의 첫회 park 의 원인이 된 상태를 재체크할 필요가 있습니다. 호출측은, thread의 인터럽트 상태나, 복귀시의 현재 시각등도 판정할 수 있습니다.
deadline
- 대기용의, 신기원으로부터의 밀리 세컨드 단위의 절대 시간
|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.