Ciao, questo è che non vuoi farlo.
Lo abbiamo visto in alcuni scenari in un ambiente multi-thread.
Le cose possono funzionare in modo imprevedibile in quanto è un ular strutturato che gestisce tutto, di conseguenza abbiamo
discusso sulla condizione di rischio che potrebbe accadere quando i thread condividono alcuni dati mutabili e abbiamo visto
come la Sincronizzazione può aiutare in questo.
Utilizzando la sincronizzazione.
Possiamo far funzionare le cose in una scrittura più ordinata in Java, abbiamo qualcosa chiamato il modello di
memoria Java.
E tu trovi questi signori auditing la malta è parte della specifica del linguaggio Java ed
è correlata al multi-threading.
È bene essere consapevoli di ciò quando eseguiamo la programmazione multithread in particolare quando
si tratta di dati mutabili condivisi.
Non è roba complicata.
Sono solo alcune regole di cui dobbiamo essere consapevoli.
In questa conferenza vedranno quali sono le regole dei dati in un evento nel seguito che esploreranno alcune
delle cose rilevanti.
Si può chiamare un leggero dalla nostra struttura precedente.
Questo è il cattivo esempio di John unadopt visitatore John e Anita sono pronunciati da bootlace che sono entrambi
attivi allo stesso tempo.
Quindi Jon Stewart potrebbe mettere in difficoltà Dolma sporcando il saldo del nuovo su di esso allo stesso tempo non controllato.
Potrebbe anche accedere al metodo di bilanciamento sulla scena che Bangkit non può obiettare.
Ma molto non ha visto il tutto per niente.
Quindi non c'è alcuna garanzia che lo faccia oggi vedrà la necessità di discutere e se
non vede il valore più recente significa che nel sistema che sta entrando in uno stato non corretto essenzialmente abbiamo qui la
condizione di competizione.
Una ragione per cui è sufficiente leggere che vede che tutto il valore potrebbe essere dovuto ad azioni fuori ordine, ad esempio.
Potrebbe essere che Jon Stewart si trovi all'interno del metodo di prelievo e conosca anche il controllo del saldo.
Ma poi va in corsa subito prima di abradire l'equilibrio, un atto non abituato diventerebbe acto, il che significa che sarebbe
in stato di esecuzione a Dunwich vedere tutto su di te in bilico dato che non è aggiornato.
Ma potrebbe non aver voluto che la sequenza di azioni fosse in questo modo.
C'è un interleaving di azioni.
La ragione è ovviamente che uno è un metodo sincronizzato mentre l'altro non
è sincronizzato e non sappiamo mai come leggere dovrebbe essere eseguito correttamente.
Un altro motivo può essere quindi che abbiamo a che fare con un sistema multiprocessore che condivide la memoria.
Ma proprio quello che i sistemi più moderni sono qui.
Ogni processore ha la propria cache locale periodicamente e riconcilia la memoria condivisa in modo che lo stret possa trovarsi su un processore e
potrebbe eseguire il completamento documentato in modo che esegua completamente la marca con Dolemite che la nuova
quantità di saldo possa essere scaricata nella cache locale e quindi anche alla memoria principale comunque non controllata che
potrebbe essere su un altro processore, potrei leggere il valore di bilanciamento sulla cache locale che
ha solo valore non ancora aggiornato.
Quindi fattori come questo in tutte le azioni che abbiamo visto prima possono impedire a una
minaccia di vedere i valori aggiornati.
Quindi fondamentalmente c'è mancanza di coordinamento.
E se ricordi nella lezione precedente hai detto che ha qualcosa a che fare con le prestazioni.
La maggior parte delle volte non ha bisogno di cose proprie e non è necessario
comunicare con altre minacce che comunicano con altre parole su ogni operazione di scrittura ed è costoso e potrebbe
diventare davvero pessimo in un sistema multiprocessore con memoria condivisa a causa alla necessità di aggiornamenti frequenti che
devono avvenire tra il loop e la memoria e la memoria condivisa.
La coordinazione è necessaria solo quando lo stato mutabile è condiviso tra le tracce come un avviso John su
un esempio.
Ma lo stato immutabile è la variabile di equilibrio.
Quindi, se non vi è alcuna condivisione di notabili, non vi è alcun motivo per coordinare tra
le minacce, nonostante eventuali operazioni corrette.
Allo stesso modo, se hanno a che fare con oggetti del mare completamente diversi nelle nuvole, ancora una
volta la coordinazione potrebbe non essere affatto necessaria.
Ma se c'è uno stato condiviso che è degno di nota, è responsabilità del programma, non GBM, assicurarsi
che venga chiamato interrompere lo stato di merda.
OK, quindi tutto questo è per le prestazioni del seacock.
Un modo per garantire che il clinico sia sincronizzato è che è molto difficile farlo.
E abbiamo visto questo nella lezione precedente fare il loro ottenere equilibrio è anche sincronizzato no.
JON STEWART HOST La sorella di Axel, Nick the Dortmunder, che non è abituata a non avere problemi di equilibrio
sotto Jon Stewart, fa il cane come sappiamo che in ogni istante di tempo solo un thread può intrattenere
il metodo sincronizzato di un oggetto condiviso.
Ha detto che le due azioni Jon Stewart e lasciare il marchio con il metodo Dorling e su
di esso vanno a quello e ottenere l'equilibrio come accade prima della relazione.
Jon Stewart e ottenere MC con tutti succede prima che lo faccia in un buon equilibrio.
E questo accade prima che il rapporto anche quello che appena letto vede solo le ultime novità sui batas Quindi quello che succede prima che
il rapporto che abbiamo appena visto è raggiunto attraverso la sincronizzazione e questa nozione
di prima è parte del lavoro ha perso più memoria e la JVM implementa la memoria appena persa più
su soap e vede la parola chiave sincronizzata che sa che c'è bisogno di coordinazione di interconnessione.
Per questo inserisce speciali barriere di memoria per le istruzioni che installano l'architettura sottostante Gugu
per coordinare la memoria necessaria tra la cache e la memoria condivisa.
Si noti che nel nostro esempio bancario per essere al mio posto la barriera della memoria subito dopo che il thread di John è
uscito fa la parte centrale sotto il lucchetto esistente.
O potrebbe farlo.
Poi ho notato che il lucchetto è chiuso per ottenere un buon bilanciamento.
Quindi il momento esatto in cui GBM inserisce la barriera di memoria dipende dall'implementazione specifica di GBM al di sotto
di esso non è specificato nel modello di memoria Ajalon che, come abbiamo detto prima,
fa parte delle specifiche del linguaggio Java in modo che l'accadimento prima di ordinare possa essere sicuro che i risultati sono l'azione
giusta da un thread o devono essere visibili ad una reazione da un editore.
Solo se l'operazione corretta avviene prima dell'operazione di lettura, non il lavoro.
Nessuno specifica che alcuni scenari o regole si verificano prima che avvenga l'ordine e la sincronizzazione è solo
una di queste.
Diamo un'occhiata ai diversi scenari.
Il primo è basato sull'ordine del programma.
Questo avviso che ogni azione in un determinato thread avviene prima di ogni altra azione che
viene dopo e durante.
Il secondo è basato sulla fortuna, che è quello che abbiamo discusso con il nostro esempio di sincronizzazione
che rilasciando ilok avviene prima di ogni successiva acquisizione di quella stessa logica.
Sapete che esempio se si effettuano prelievi e si cammina velocemente allora esiste la minaccia Ajani che
limita rilascia la serratura che viene poi acquisita da non abituata al fine di ottenere l'equilibrio.
Non che se le azioni indeterminate giuste usano blocchi diversi allora ciò non è accaduto prima delle
relazioni tra le due azioni.
Quindi tienilo a mente.
Deve essere il singolo successivo basato sulla variabile volatile che è l'argomento della prossima lezione.
Fondamentalmente volatile è una parola chiave che può essere usata quando si dichiara una variabile
e il diritto a tale variabile avviene prima di ogni successiva lettura di quella variabile indipendentemente dal thread letto.
Poi fa partire una traccia da cosa significa.
È senza carta parcheggiata su un dato thread.
Succede prima di ogni altra azione che si verifica all'interno di quella traccia. Nextel si basa sull'operazione JOIN.
Ciò significa che tutte le azioni in un determinato thread avvengono prima che la traccia ritorni con successo da un
gigante in poi.
Regola di interruzione dei nestors.
Interrupt è un metodo e può essere invocato su una minaccia diretta che dovrebbe interrompere ciò che sta
facendo e fare qualcos'altro.
In genere è una minaccia come mezzo per porre fine alla minaccia.
Per quanto riguarda ciò che accade prima o durante l'atto di una minaccia, il metodo di
interruzione di chiamata su un'altra minaccia avviene prima che la minaccia interrotta rilevi che le donne intrapersonali si metteranno nei guai in seguito.
Il prossimo è la regola del finalizzatore che riguarda il metodo finalizzato e l'oggetto più il
metodo finalize verrà invocato o un garbage collector quando rileva che non ci sono
più riferimenti all'oggetto.
Quindi i cluster di oggetti possono sostituire la materia finalizzata per eseguire qualsiasi operazione di pulitura prima che
l'oggetto sia garbage collector e Gotcha succede prima di ordinare.
La regola è che la fine del costruttore di un oggetto si verifica prima dell'inizio del finalizzatore
per quell'oggetto.
Destra.
Ovviamente questo è ciò che accadrà.
Il prossimo è che tutti i client lo fanno in base all'azione che accade prima che l'azione B dell'azione B avvenga
prima dell'azione C, quindi l'azione avviene prima delle azioni.
Quindi quelle sono le opzioni prima di ordinare.
E credo che le seconde e le terze regole sui blocchi della volatilità, ma le variabili
siano probabilmente quelle che contano davvero per noi, dato che le utilizziamo deliberatamente solo per riassumere queste regole DMM,
assicuriamo che diversi thread abbiano una visione coerente del sistema condiviso.
Questo è il risultato di un'azione corretta da parte di un thread che è garantito che sia visibile per leggere l'azione da un
altro thread.
Solo se accade prima dell'operazione di lettura che avviene prima di ordinare avremmo una condizione
di rischio sul programma sincronizzato concreto senza condizioni di rischio.
Questo è tutto.
Grazie.