2012-03-31 11 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) In che modo impostano "atomicamente" il valore di "o" nella posizione "offset" a "x" se "valore == previsto"?Implementazione della classe di protezione solare non sicura

2) In che modo "bloccano" l'oggetto quando utilizziamo il metodo sincronizzato o il blocco sincronizzato? Sono solo curioso di sapere cosa va sotto il cofano.

+0

Penso che avrete bisogno di un libro di testo. –

+0

@ TomHawtin-tackline Puoi darmi il nome/qualsiasi libro di testo? –

+3

In realtà, dubito che ci sia un libro di testo che copra l'argomento in modo accurato/profondo. È il genere di cose che prendi per strada. –

risposta

4
  1. Poiché questo è un metodo nativo, ricadranno su qualsiasi piattaforma offerta. IIRC, "confronta e scambia" era presente su MIPS e SPARC come comando del processore più di 10 anni fa.

  2. che usare qualcosa come 1 dietro le quinte per ottenere il blocco oggetto

2

Sì, la chiamata compareAndSwapObject si traduce in una chiamata al metodo nativo o in una espansione in linea che esegue il confronto e scambio utilizzando le funzionalità hardware native.

Per quanto riguarda l'implementazione della parola chiave synchronized, è possibile utilizzare qualsiasi numero di tecniche, ma sono tutte simili al confronto e scambio concettualmente.

Problemi correlati