Salve, questo è che non vogliono sapere, non dare un'occhiata ad alcune regole di buone pratiche quando si
tratta di utilizzare la sincronizzazione.
Molte delle soluzioni provengono dall'etica del manuale.
Abbiamo già discusso questa regola, ma è molto importante.
Quindi discutiamone ancora una volta.
Le regole sono che dobbiamo usare la sincronizzazione ovunque.
La variabile condivisa notabile è giusta e abbiamo anche analizzato questo esempio di conto bancario che coinvolge
John Anita, che condivide un singolo conto bancario che ha discusso le conseguenze rende il Dolma sincronizzato ma non
l'equilibrio, ma ha detto che la minaccia di Mxit di John potrebbe fare di Dalma una
buona immagine.
Ci sarà New Balance Hammil, tuttavia Anita che accede successivamente al metodo di bilanciamento potrebbe Sancy il valore
di sbilanciamento in quanto un buon bilanciamento non è sincronizzato, quindi c'è una mancanza di coordinamento e di quale
scenario abbiamo bisogno per garantire che stiamo sincronizzando ogni dove il la variabile di equilibrio
viene utilizzata.
Quindi, a causa di ciò il metodo di bilanciamento deve essere sincronizzato come vediamo qui.
Ed ecco un'altra regola correlata che è stata già discussa ma è inclusa qui solo per
motivi di completezza.
La regola usa lo stesso lock quando si custodisce la stessa variabile mutabile condivisa che non ha una variabile usando un
lock in un posto e usando un altro lock in qualche altro posto.
Ed ecco un esempio che abbiamo usato quando abbiamo discusso di questa regola.
Quindi, ancora una volta è l'esempio del conto bancario e abbiamo la marca sincronizzata che non
importa e abbiamo anche un altro metodo chiamato deposito che utilizza un blocco sincronizzato e sta proteggendo la stessa variabile
di equilibrio appena sommata mentre viene creata.
Non un metodo sincronizzato effettua il ritiro poiché non utilizziamo il blocco dell'oggetto del conto bancario.
Questo è il blocco dell'oggetto su cui è stato richiamato il metodo.
Tuttavia, il metodo di deposito utilizza un oggetto stringa o France come blocco e ciò non dovrebbe essere fatto.
Quindi vengono utilizzati due blocchi diversi per proteggere la stessa variabile che viene condivisa tra i due.
Quindi l'effetto della sincronizzazione è perso.
Quello è John che le minacce anonime possono usare simultaneamente la roba sincronizzata e l'esito non può
essere come desiderato.
No, quando discutiamo di questo esempio prima non abbiamo discusso della visibilità della memoria al momento opportuno.
Almeno accade prima che la relazione non esista tra le due azioni che stanno usando
cammini diversi e le azioni che sono invocazioni di rendere Mithal e depositare da due thread diversi contemporaneamente a causa
di questo.
Mi piacciono le persone e contrasta il problema dell'abilità della memoria.
Ecco un'altra regola che dice se un metodo di modifica è statico, devi sincronizzare l'accesso a questo campo anche
se la materia è in genere usata solo da un singolo thread.
La cosa da notare qui è che il tuo codice potrebbe accedere alla creazione di un singolo thread.
Mondo questo è un campo statico e ci sarà solo una singola JVM di parti di Beauchesne e in un'applicazione
vettoriale come l'ambiente vediamo come tonnellate di utenti che accedono al sistema contemporaneamente sotto suppliche di minacce e gli
utenti di Windows dovrebbero avere una visione coerente di quell'area statica .
OK, quindi il feed statico sarà accessibile da tutti quei thread diversi otterrà la stessa vista
statica.
Quindi, anche se si accede al campo statico da un singolo thread aspart, si progetta il framework
sottostante che è l'applicazione web e il varment potrebbe ancora essere multithread e quindi è necessario essere
consapevoli di questo fatto.
Quindi dovremmo seguire questa regola e la regola successiva è sincronizzare solo ciò che è necessario.
Quindi raccomanda di mantenere il blocco sincronizzato piccolo.
In questo modo riduciamo al minimo il tempo di attesa.
Quali altri thread sono sospesi a causa della mancata disponibilità del blocco.
Inoltre, se ci sono attività che richiedono tempo nei blocchi sincronizzati, dovresti vedere
se possono essere spostati fuori dalla scatola sincronizzata, ma senza compromettere la loro sicurezza è importante.
La prossima regola è la voce da 6 a 7 della mia copia di Java, che è una vasta distesa di sincronizzazione.
Il motivo è che ci sono alcuni costi associati alla sincronizzazione per rivederne alcuni.
La ragione è che il processo di sospensione e ripresa x è costoso.
Se ne è già a conoscenza, vi sono anche alcuni costi associati all'acquisizione e al rilascio
dei blocchi, anche se è meno costoso rispetto alla terza sospensione in Sospensione ora con più thread che condividono
più dati.
Abbiamo bisogno di garantire che ci sia il diritto nel registro in azione per una visibilità coerente della memoria.
Quindi ciò influenzerebbe le prestazioni di tutta la nostra sincronizzazione e lamenta la capacità di Gilliam di eseguire
l'ottimizzazione del codice.
Sappiamo che il decompilatore G-Ride gioca un ruolo nel migliorare le prestazioni in fase di esecuzione su
una delle cose che fa si parla di sollevamento.
Ad esempio, è possibile richiamare questa parte di codice dall'esempio del thread di stop durante
la discussione su Alberti. L'esempio riguardava il thread principale che interrompeva un secondo thread che aveva questo ciclo
y sul thread principale che tentava di avviare il secondo thread impostando il arresta l'arresto variabile come
variabile mutabile condivisa tra le co-dirette.
Ora in assenza di sincronizzazione o la variabile di stop non viene dichiarata come volatile discord potrebbe essere ottimizzata
in questo modo dal compilatore JRD e questo processo è noto come hosting che ha avuto lo stop disponibile si dice
che sia sollevato dal ciclo while non è fermo modificato all'interno del ciclo sul lavoro del motore a causa
della mancanza di sincronizzazione o poiché la variabile non è un decompilatore Jerry o semplicemente ha assunto che nessun altro
thread cambierà anche il suo valore.
Quindi, quale modalità di sicurezza o variabile fuori dal ciclo e il codice risultante verranno interrotti più velocemente perché c'è
meno lavoro da fare.
OK, perché abbiamo solo la squadra attuale al posto di quella variabile, perché il secondo thread verrebbe eseguito
per sempre anche se stop era impostato su true dal thread principale.
E questo tipo di situazione viene definito fallimento di Libano poiché il programma non è in grado di fare progressi.
Non il sollevamento della frizione è quasi certamente fatto su aree server che sono tipicamente installate su invii
su macchine client che raddoppiamo o usiamo installeremo la JVM del client che è JDK e non
eseguono questo genere di ottimizzazioni.
Se si desidera associare DBMS per eseguire anche tale ottimizzazione, è possibile specificare l'opzione server hyphens sulla
riga di comando durante l'esecuzione di GBM.
Infine la sincronizzazione significa accesso seriale e quindi perdiamo opportunità per il parallelismo nei sistemi
multi-core.
Quindi non dovremmo fare attenzione a non sincronizzare sempre la registrazione Significa che se non sei sicuro se
sincronizzare o meno non sincronizzare ma Dokument che la classe non è la risposta.
In questo modo se necessario.
È possibile sincronizzare il buffer di stringa Nalley aggiuntivo più avanti in questa linea guida.
È stato rilevato che le istanze del buffer di stringa venivano utilizzate principalmente da singole minacce,
ovvero non sono condivise su thread differenti in cui la classe utilizza la sincronizzazione internamente
ovunque sia necessaria e le prestazioni.
E questo è stato il motivo per cui il costruttore di stringhe Java 5 è stato intervistato in quanto un calo nel generatore di
stringhe stringa di stringa di sostituzione non utilizza alcuna sincronizzazione, quindi è più veloce.
Ma se è necessaria la sincronizzazione, è possibile utilizzare un buffer di stringa.
Quindi questo è tutto.
E abbiamo esaminato alcune linee guida molto importanti sull'utilizzo della sincronizzazione.
Grazie.