ILock 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
Lock
구현은 메서드 및 문을 사용하여 synchronized
얻을 수 있는 것보다 더 광범위한 잠금 작업을 제공합니다.
[Android.Runtime.Register("java/util/concurrent/locks/Lock", "", "Java.Util.Concurrent.Locks.ILockInvoker")]
public interface ILock : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/concurrent/locks/Lock", "", "Java.Util.Concurrent.Locks.ILockInvoker")>]
type ILock = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 파생
- 특성
- 구현
설명
Lock
구현은 메서드 및 문을 사용하여 synchronized
얻을 수 있는 것보다 더 광범위한 잠금 작업을 제공합니다. 보다 유연한 구조화를 허용하고, 속성이 매우 다를 수 있으며, 여러 연결된 개체를 Condition
지원할 수 있습니다.
잠금은 여러 스레드에서 공유 리소스에 대한 액세스를 제어하는 도구입니다. 일반적으로 잠금은 공유 리소스에 대한 단독 액세스를 제공합니다. 한 번에 하나의 스레드만 잠금을 획득할 수 있으며 공유 리소스에 대한 모든 액세스 권한은 잠금을 먼저 획득해야 합니다. 그러나 일부 잠금은 의 ReadWriteLock
읽기 잠금과 같은 공유 리소스에 대한 동시 액세스를 허용할 수 있습니다.
메서드 또는 문을 사용하면 synchronized
모든 개체와 연결된 암시적 모니터 잠금에 액세스할 수 있지만 모든 잠금 획득 및 해제가 블록 구조화된 방식으로 강제로 발생합니다. 여러 잠금을 획득할 때는 반대 순서로 해제되어야 하며 모든 잠금을 획득한 동일한 어휘 scope 해제해야 합니다.
메서드 및 문에 대한 synchronized
범위 지정 메커니즘을 사용하면 모니터 잠금으로 훨씬 쉽게 프로그래밍할 수 있으며 잠금과 관련된 많은 일반적인 프로그래밍 오류를 방지할 수 있지만 잠금을 보다 유연한 방식으로 작업해야 하는 경우가 있습니다. 예를 들어 동시에 액세스되는 데이터 구조를 트래버스하기 위한 일부 알고리즘에서는 &따옴표만 사용해야 합니다. 핸드 오버 핸드&따옴표; 또는 &따옴표; chain locking": 노드 A, 노드 B, A를 해제하고 C를 획득한 다음 B를 해제하고 D를 획득하는 등의 잠금을 획득합니다. 인터페이스를 Lock
구현하면 잠금을 획득하고 다른 범위에서 해제할 수 있고 여러 잠금을 임의의 순서로 획득하고 해제할 수 있도록 하여 이러한 기술을 사용할 수 있습니다.
이러한 유연성 향상으로 추가적인 책임이 발생합니다. 블록 구조 잠금이 없을 경우 메서드 및 문에서 synchronized
발생하는 잠금의 자동 해제가 제거됩니다. 대부분의 경우 다음 관용구를 사용해야 합니다.
{@code
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}}
잠금 및 잠금 해제가 다른 범위에서 발생하는 경우 잠금이 유지되는 동안 실행되는 모든 코드가 try-finally 또는 try-catch를 통해 보호되어 필요할 때 잠금이 해제되도록 주의해야 합니다.
Lock
구현은 잠금을 획득하기 위한 비차단 시도(), 중단#lockInterruptibly
될 수 있는 잠금 획득 시도(및 시간 초과#tryLock(long, TimeUnit)
(#tryLock()
)할 수 있는 잠금 획득 시도를 제공하여 메서드 및 문 사용에 synchronized
대한 추가 기능을 제공합니다.
클래스는 Lock
보장된 순서 지정, 재진입하지 않는 사용 또는 교착 상태 검색과 같이 암시적 모니터 잠금과는 매우 다른 동작 및 의미 체계를 제공할 수도 있습니다. 구현에서 이러한 특수 의미 체계를 제공하는 경우 구현은 이러한 의미 체계를 문서화해야 합니다.
Lock
인스턴스는 일반 개체일 뿐이며 문에서 synchronized
대상으로 사용할 수 있습니다. instance 모니터 잠금을 Lock
획득하는 것은 해당 instance 메서드를 #lock
호출하는 것과 지정된 관계가 없습니다. 혼동을 방지하려면 자체 구현을 제외하고 이러한 방식으로 인스턴스를 사용하지 Lock
않는 것이 좋습니다.
언급된 경우를 제외하고 모든 매개 변수에 null
대한 값을 전달하면 이 NullPointerException
throw됩니다.
<h2>메모리 동기화</h2>
모든 구현은 Java 언어 사양</인용>>: <ul><li>A 성공적인 lock
작업은 성공적인 <em>Lock</>em> 작업과 동일한 메모리 동기화 효과를 가짐에 따라 기본 제공 모니터 잠금에서 제공하는 것과 <동일한 메모리 동기화 의미 체계를 적용해야 합니다.<><Lock
<li>A 성공적인 unlock
작업은 성공적인 <em>Unlock</em> 작업과 동일한 메모리 동기화 효과를 줍니다. </ul>
잠금 및 잠금 해제 작업에 실패하고 잠금/잠금 해제 작업을 다시 입력해도 메모리 동기화 효과가 필요하지 않습니다.
<h2>구현 고려 사항</h2>
세 가지 형태의 잠금 획득(인터럽트 가능, 비 인터럽트 가능 및 시간 제한)은 성능 특성, 순서 지정 보장 또는 기타 구현 품질에서 다를 수 있습니다. 또한 지정된 Lock
클래스에서는 잠금 획득을 <>중단<>하는 기능을 사용할 수 없습니다. 따라서 구현은 세 가지 형태의 잠금 획득 모두에 대해 정확히 동일한 보장 또는 의미 체계를 정의할 필요가 없으며 지속적인 잠금 획득 중단을 지원할 필요도 없습니다. 각 잠금 메서드에서 제공하는 의미 체계 및 보장을 명확하게 문서화하려면 구현이 필요합니다. 또한 잠금 획득 중단이 지원되는 범위까지 이 인터페이스에 정의된 중단 의미 체계를 준수해야 합니다. 이는 완전히 또는 메서드 항목에만 적용됩니다.
인터럽트는 일반적으로 취소를 의미하고 중단에 대한 검사는 드물기 때문에 구현은 정상적인 메서드 반환보다 인터럽트에 응답하는 것을 선호할 수 있습니다. 다른 작업으로 스레드의 차단을 해제한 후 인터럽트 발생이 표시될 수 있는 경우에도 마찬가지입니다. 구현에서는 이 동작을 문서화해야 합니다.
1.5에 추가되었습니다.
에 대한 Java 설명서입니다 java.util.concurrent.locks.Lock
.
이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.
속성
Handle |
기본 Android 개체의 JNI 값을 가져옵니다. (다음에서 상속됨 IJavaObject) |
JniIdentityHashCode |
|
JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
PeerReference |
JniObjectReference 래핑된 Java 개체 instance 의 를 반환합니다. (다음에서 상속됨 IJavaPeerable) |
메서드
Disposed() |
instance 삭제되었을 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
DisposeUnlessReferenced() |
이 instance 대한 미해결 참조가 없으면 를 호출 |
Finalized() |
instance 완료되면 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
Lock() |
잠금을 획득합니다. |
LockInterruptibly() |
현재 스레드가 Thread#인터럽트 중단되지 않는 한 잠금을 획득합니다. |
NewCondition() |
이 |
SetJniIdentityHashCode(Int32) |
에서 반환 |
SetJniManagedPeerState(JniManagedPeerStates) |
|
SetPeerReference(JniObjectReference) |
에서 반환 |
TryLock() |
호출 시 잠금이 해제된 경우에만 잠금을 획득합니다. |
TryLock(Int64, TimeUnit) |
지정된 대기 시간 내에 잠금이 해제되고 현재 스레드가 Thread#인터럽트 중단되지 않은 경우 잠금을 획득합니다. |
Unlock() |
잠금을 해제합니다. |
UnregisterFromRuntime() |
런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 instance 등록을 취소합니다. (다음에서 상속됨 IJavaPeerable) |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
|
GetJniTypeName(IJavaPeerable) |
|