2012-03-31 8 views
5
/** 
    * Atomically update Java variable to <tt>x</tt> if it is currently 
    * holding <tt>expected</tt>. 
    * @return <tt>true</tt> if successful 
    */ 
    public final native boolean compareAndSwapObject(Object o, long offset, 
                Object expected, 
                Object x); 

1) ¿Cómo establecen "atómicamente" el valor de "o" en la posición "desplazamiento" en "x" si "valor == esperado"?Implementación de clase de sol insegura

2) ¿Cómo "bloquean" el objeto cuando usamos el método sincronizado o el bloque sincronizado? Solo tengo curiosidad por saber qué pasa debajo del capó.

+0

creo que se va a necesitar un libro de texto. –

+0

@ TomHawtin-tackline ¿Me puede dar el/cualquier nombre de libro de texto? –

+3

En realidad, dudo que haya un libro de texto que cubra el tema con precisión/profundidad. Es el tipo de cosas que recoges en la calle. –

Respuesta

4
  1. Como se trata de un método nativo, recurrirán a lo que ofrece la plataforma de destino. IIRC, "compare and swap" estuvo presente en MIPS y SPARC como comando de procesador hace más de 10 años.

  2. que usar algo como 1 entre bastidores para obtener bloqueo en el objeto

2

Si, la llamada compareAndSwapObject se traduce en una llamada a método nativo o en una expansión en línea que hace el compare-and-swap utilizando instalaciones de hardware nativas.

En cuanto a la implementación de la palabra clave synchronized, se pueden usar cualquier cantidad de técnicas, pero todas se parecen a las de comparar y cambiar conceptualmente.

Cuestiones relacionadas