Lenguaje

ClassValue.Remove(Class) Método

Definición

Quita el valor asociado de la clase especificada.

[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

Parámetros

type
Class

el tipo cuyo valor de clase se debe quitar

Atributos

Comentarios

Quita el valor asociado de la clase especificada. Si este valor se #get leer posteriormente para la misma clase, se reinicializará su valor invocando su #computeValue computeValue método. Esto puede dar lugar a una invocación adicional del computeValue método para la clase especificada.

Para explicar la interacción entre get las llamadas y remove , debemos modelar las transiciones de estado de un valor de clase para tener en cuenta la alternancia entre los estados no inicializados e inicializados. Para ello, numera estos estados secuencialmente de cero y ten en cuenta que los estados no inicializados (o eliminados) se numeran con números pares, mientras que los estados inicializados (o reinicializados) tienen números impares.

Cuando un subproceso T quita un valor de clase en el estado 2N, no sucede nada, ya que el valor de clase ya no está inicializado. De lo contrario, el estado se avanzada de forma atómica en 2N+1.

Cuando un subproceso T consulta un valor de clase en estado 2N, el subproceso primero intenta inicializar el valor de clase en estado 2N+1 invocando computeValue e instalando el valor resultante.

Cuando T intenta instalar el valor recién calculado, si el estado sigue en 2N, el valor de clase se inicializará con el valor calculado, lo que lo avanzará al estado 2N+1.

De lo contrario, si el nuevo estado es par o impar, T descartará el valor recién calculado y volverá a intentar la get operación.

Descartar y volver a intentar es un punto importante, ya que, de lo contrario T , podría instalar un valor desastrosomente obsoleto. Por ejemplo: <ul><li>T llama CV.get(C) a y ve el estado2N< li>T rápidamente calcula un valor V0 dependiente del tiempo y se prepara para instalarlo <li>T es alcanzado por un evento de paginación o programación desafortunado, y va a dormir durante mucho tiempo <>li... Mientras tanto, T2 también llama CV.get(C) a y ve el estado2N< li>T2 rápidamente calcula un valor V1 dependiente del tiempo similar e lo instala enCV.get(C)< li>T2 (o un tercer subproceso) a continuación llama a CV.remove(C), deshacer T2's work <li>, las acciones anteriores de T2 se repiten varias veces <li> también, los valores calculados pertinentes cambian con el tiempo: V1, , ... V2<li>... mientras tanto, T despierta e intenta instalar V0; <em>this must fail</em></ul> We can assume in the above scenario that CV.computeValue uses locks to observe correctamente the time-dependent states as it computes V1, etc. Esto no quita la amenaza de un valor obsoleto, ya que hay una ventana de tiempo entre el retorno de computeValue en T y la instalación del nuevo valor. No es posible realizar ninguna sincronización de usuarios durante este tiempo.

Documentación de Java para java.lang.ClassValue.remove(java.lang.Class<?>).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Se aplica a