언어

ClassValue.Remove(Class) 메서드

정의

지정된 클래스에 대한 연결된 값을 제거합니다.

[Android.Runtime.Register("remove", "(Ljava/lang/Class;)V", "GetRemove_Ljava_lang_Class_Handler", ApiSince=34)]
public virtual void Remove(Java.Lang.Class? type);
[<Android.Runtime.Register("remove", "(Ljava/lang/Class;)V", "GetRemove_Ljava_lang_Class_Handler", ApiSince=34)>]
abstract member Remove : Java.Lang.Class -> unit
override this.Remove : Java.Lang.Class -> unit

매개 변수

type
Class

클래스 값을 제거해야 하는 형식

특성

설명

지정된 클래스에 대한 연결된 값을 제거합니다. 이후에 이 값이 동일한 클래스에 대해 읽기 #get 경우 해당 메서드를 호출하여 #computeValue computeValue 해당 값이 다시 초기화됩니다. 이로 인해 지정된 클래스에 대한 메서드가 computeValue 추가로 호출될 수 있습니다.

호출 간의 get 상호 작용을 설명하기 위해 초기화되지 않은 상태와 remove 초기화된 상태 간의 교대를 고려하여 클래스 값의 상태 전환을 모델링해야 합니다. 이렇게 하려면 이러한 상태를 0에서 순차적으로 번호 매기고 초기화되지 않은(또는 제거된) 상태는 짝수로 번호가 매겨지고 초기화된(또는 다시 초기화된) 상태는 홀수입니다.

스레드 T 가 상태 2N의 클래스 값을 제거하면 클래스 값이 이미 초기화되지 않으므로 아무 작업도 수행되지 않습니다. 그렇지 않으면 상태는 원자성으로 진행됩니다 2N+1.

스레드 T 가 상태2N의 클래스 값을 쿼리하는 경우 스레드는 먼저 결과 값을 호출 2N+1 하고 설치하여 클래스 값을 상태로 computeValue 초기화하려고 시도합니다.

T 새로 계산된 값을 설치하려고 하면 상태가 여전히 2N있는 경우 클래스 값이 계산된 값으로 초기화되어 상태로 2N+1진행됩니다.

그렇지 않으면 새 상태가 짝수인지 홀수 T 인지에 관계없이 새로 계산된 값을 삭제하고 작업을 다시 시도합니다 get .

폐기하고 다시 시도하는 것은 중요한 proviso입니다. 그렇지 않으면 T 잠재적으로 비참한 부실 값을 설치할 수 있기 때문에. 예를 들어, <ul><li>T 호출 CV.get(C) 및 상태 2N<li>T 빠르게 시간 종속 값을 V0 계산 하 고 설치 준비 <리>T 불운 페이징 또는 일정 이벤트에 의해 적중 되 고 오랜 시간 <동안> 절전 모드로 간다... 한편, T2 또한 호출 CV.get(C) 하고 상태 2N<li>T2 신속하게 유사한 시간 종속 값을 V1 계산하고 liCV.get(C)< (또는 세 번째 스레드)에 >T2설치 한 다음 호출CV.remove(C)을 볼 수 있습니다, T2'의 작업 <리> 이전 작업은 T2 여러 번 <반복 li>도 반복, 관련 계산 값은 시간이 지남에 따라 변경 : V1, , ... V2<li>... 한편, T 절전 모드를 해제하고 설치V0를 시도 ; <em>이 장애</em></ul>이어야 합니다. 위 시나리오 CV.computeValue 에서는 잠금을 사용하여 계산V1할 때 시간 종속 상태를 제대로 관찰하는 것으로 가정할 수 있습니다. 반환과 새 값의 설치 사이에 computeValueT 시간이 있기 때문에 부실 값의 위협은 제거되지 않습니다. 이 시간 동안 사용자 동기화는 불가능합니다.

에 대한 java.lang.ClassValue.remove(java.lang.Class<?>)Java 설명서

이 페이지의 일부는 만들고 공유한 작업을 기반으로 하며 에 설명된 조건에 따라 사용됩니다.

적용 대상