Ciao, questo è determinato a farlo.
Ora diamo un'occhiata al modificatore volatile che può essere usato con Berryman nella lezione precedente.
Abbiamo visto che spesso accade prima che le regole di ordinamento fossero basate su variabili volatili.
Uno è semplicemente un modificatore che viene utilizzato con le variabili e aiuta a garantire la visibilità della memoria.
Questo è una volta un thread particolare.
Giusto quindi sarai una variabile volatile.
È garantito che il valore particolare sarebbe visibile a tutti i successivi saluti della tabella di query
da tutte le minacce.
Questo è ciò che è stato menzionato nella lezione precedente e potrebbe essere una
variabile volatile stabilire come accade prima di ordinare, ma i successivi trucchi della stessa variabile indipendentemente dal thread che
sta eseguendo la lettura.
Quindi il valore della variabile volatile verrà propagato a tutti gli altri thread.
È un normale dibattito per evitare la sincronizzazione della visibilità della memoria, aiuterebbe anche a farlo nel modo giusto.
L'abbiamo già visto.
E se si guarda al dizionario il significato di bene è qualcosa che cambia molto
rapidamente e imprevedibile.
Quali sono i valori idonei vengono sempre memorizzati nella memoria principale in modo che non vengano memorizzati nella cache e che
i registri siano nei processori della cache locale.
Quindi credo che semplifica i criteri di visibilità della memoria dato che stiamo trattando solo la memoria
principale che ogni processore scriverà sempre un valore di variabile qualitativa alla memoria principale e vorrà leggerli
nella memoria principale.
Quale piccola parola chiave può essere usata con variabili mutabili condivise, non che la parola chiave volatile non possa essere
usata con variabili locali come l'ambito delle variabili locali e con il blocco in cui sono definite.
Quindi non ha senso.
Ed ecco un tipico caso d'uso di una variabile volatile e il codice è adattato dalla voce 5:54 a un
Java efficace.
Qui l'obiettivo è fermare un thread sotto questa corte.
Ci sono due thread.
Uno è il thread principale e l'altro è mostrato nella casella grigia dove stiamo usando una classe
anonima per implementare quell'attività.
È inoltre possibile notare l'invocazione della dichiarazione che questo esempio mostra un coordinamento rigoroso dal
thread principale.
Vogliamo fermare il secondo thread e per questo stiamo usando la variabile mutabile condivisa chiamata Stop.
Sotto è dichiarato come volatile e ha un valore predefinito AHA, non il secondo thread ha un loop all'interno del
ciclo.
Stiamo stampando del testo undealt stop è impostato su true dopo circa un secondo.
Il set di thread principale si è fermato.
Vero, ma questo è quando leggo il secondo thread ritorna nello stato di esecuzione nel caso in cui
la condizione non dovesse riuscire e la terza terminerebbe la variabile azionaria non dichiarata come volatile.
Quindi non vi è alcuna garanzia che il secondo thread vedrà mai il valore aggiornato o si fermerà
e sarà infinitamente nuovo.
Quindi, cosa stai stabilendo che accada prima di ordinare su questo.
Consentendo ai due thread di coordinarsi in modo efficace e qui è lo stesso esempio ma utilizzando la sincronizzazione sappiamo
che la sincronizzazione stabilisce anche che avviene prima di ordinare.
Quindi si ferma è impostato su true all'interno del metodo sincronizzato chiamato stop di richiesta che viene richiamato dal
metodo principale.
Allo stesso modo c'è anche il metodo sincronizzato per fermare i bit che legge semplicemente l'ultimo stop di Radulov
e questo metodo è accessibile dal secondo terzo.
Quindi, una volta che l'interruzione delle richieste viene invocata da Main, il metodo di stop successivo viene richiamato con un secondo thread.
Il secondo thread mentre la condizione fallirà e raramente terminerà.
Quindi la sincronizzazione fa anche tutto ciò che fa.
Tuttavia, secondo il blocco di Joshuah, sembra che le prestazioni siano sagge.
Una piccola domanda potrebbe essere migliore.
E ovviamente è anche molto più leggibile senza i due metodi aggiuntivi.
Ora, anche nel nostro esempio di conto bancario, abbiamo visto il vantaggio della visibilità di Mammootty a causa della sincronizzazione.
Sappiamo che Anita Austrade riesce a vedere l'ultimo round fuori equilibrio.
Se gli accessi alla frequenza cardiaca ottengono il bilanciamento methhead dopo Jon Stewart ablate equilibrio nella marca
con Dolemite che, oltre alla sincronizzazione della visibilità della memoria, garantisce anche l'esclusione reciproca che si trova in
un dato momento.
Solo un thread può accedere ai metodi Synchronize ottenere il bilanciamento e fare con dawn sul Tedward rilasciare il
lock solo dopo essere usciti da quel punto.
E questo è necessario perché vogliamo che il metodo Dawley funzioni correttamente atomicamente e se non usiamo
sicuramente Synchronoss.
Ma se semplicemente rendiamo volatile una variabile volatile, otteniamo la visibilità di Mammootty, ma avremmo comunque la condizione
di gara se prenotata su di essa.
Noi e Jon Stewart ci stiamo ritirando nello stesso momento, quindi abbiamo bisogno di essere bloccati qui.
Quindi, in sostanza, il blocco della sincronizzazione può arrivare in profondità, ma la visibilità della memoria e l'esclusione
reciproca mentre la variabile volatile può solo garantire la visibilità della memoria.
Se c'è un singolo thread che è giusto in una variabile condivisa su altri thread, leggi il valore di
quella variabile.
Quindi non vi è alcuna questione di condizioni di gara e possiamo usare variabili a coda di rondine nel nostro esempio tappato.
Avevamo il thread principale che impostava la variabile condivisa stop su true nel secondo.
Stavo leggendo quel valore.
Quindi, quale stile è un candidato perfetto per quello in quel particolare esempio anche se ci fossero più thread
che cercano la variabile condivisa non è vero allora possiamo ancora usarne uno visto che tutti i thread stanno impostando una variabile
di stop con lo stesso valore.
Vero e quindi non dovrebbe importare, ma se ci può essere una condizione seria, non possiamo usare volatile e
dobbiamo sincronizzare il nostro esempio di conto bancario con solo Donjon ha un controllo quindi agisce sulle condizioni
e dobbiamo usare la sincronizzazione lì.
Ovviamente otteniamo anche il beneficio della visibilità della memoria per ascoltare qualcosa di più sulla semantica di
Mammootty, sono tutte azioni che precedono o che non nutro o non rilascia.
Anche Locke è visibile a tutte le azioni che dopo una successiva lettura della scena non erano insopportabili.
La nostra acquisizione della stessa serratura.
Non è chiaro quindi la prossima illustrazione dovrebbe essere utile.
Vediamo come, a sua volta.
Abbiamo alcune azioni e quelle azioni precedono leggermente o Walton Feed o rilascio tutto insieme.
Timestamp non-literate successivo dobbiamo leggere il quale Ada legge dallo stesso wallet su richiesta lo stesso lock
che è stato rilasciato in precedenza ma che tutte le precedenti azioni che abbiamo visto nel cloud
saranno visibili anche al thread B.
Diamo un'occhiata a un esempio ora e guardalo già nel contesto di Wallack.
Vediamo se aiutiamo il thread a lanciare un bit in qualche istante di tempo su un accesso all'abisso
X e facciamo 10 e 15 rispettivamente.
Qui siamo una variabile volatile.
È una variabile regolare accanto a un'istanza temporale successiva.
Non essere lanciato successivamente da un'istanza Il thread D-3 viene riassegnato in Leva extra la volta successiva che l'istante precedente non può essere letto
X ma vede ancora il valore come allora.
Quindi non vedendo il nuovo valore all'istante di tempo il thread di combattimento aggiorna la variabile volatile
v il 16 e infine un'istanza di tempo D6 non può essere raggiunta una variabile volatile.
E poi legge x con quell'ottimo battito arriva a vedere i valori più recenti sia di x che di x.
Quindi, come puoi vedere leggendo la variabile variabile di rollergirl, B è anche in grado di vedere il valore
più recente di x.
Quindi questo è tutto.
Sappiamo capire quale variabile volatile si trova nella sincronizzazione della visibilità della memoria di B,
d'altra parte.
Ho ottenuto la visibilità della memoria del libro così come in città.
No, non lo è.
30 secondi.
Facciamo una rapida demo di tutto il programma Star Trek OK ecco un nuovo thread di stop di classe su di esso è stato aggiunto
con un pacchetto di concorrenza e possiamo vedere qui la variabile stop su Vollertsen e tutto il resto è
lo stesso.
Abbiamo due thread il thread principale sul secondo thread e quindi è stato più lucido.
Quindi il thread principale dopo circa 1 secondo.
Qui è qualcosa di veramente sbagliato.
Il secondo thread non appena si ferma, la vite sta per terminare.
Quindi sono io.
Corri a correre ora che è finito.
Quindi questo è tutto.
Puoi andare avanti e puoi anche scaricare questo programma dalla sezione sorgente e puoi rimuovere la parola
chiave qui e puoi provare a giocare con il programma.
Quindi questo è tutto.
Grazie.
Sono felice di programmare.