2015-07-06 13 views
6

Sono all'inizio di un'applicazione Java. Ho creato un servizio con alcuni thread, ma non ho capito quando devo usare sincronizzato e quando no.Android, quando devo utilizzare syncronized in una discussione

Ad esempio, devo connettermi con una connessione bluetooth a un modulo e quindi utilizzo un servizio con due thread: ConnectThread abbandona la connessione e ConnectedThread gestisce la connessione di lettura/scrittura.

Quindi quando devo utilizzare sincronizzato?

Grazie

+0

Il multithreading in java è un problema molto complesso. Può essere compreso solo attraverso la pratica e la lettura di documentazione o tutorial. – dit

+0

possibile duplicato di [sincronizzato in java - Uso corretto] (http://stackoverflow.com/questions/24128997/synchronized-in-java-proper-use) –

+0

Possibile duplicato di http://stackoverflow.com/questions/24128997/synchronized-in-java-proper-use/24143267 # 24143267 –

risposta

2

Usa la parola chiave sincronizzato ogni volta che diversi thread utilizzano lo stesso (cioè a livello mondiale) variabili (i), in pratica quando l'informazione è condiviso. Controlla il codice per vedere se questo è il caso.

Sincronizzato non è necessario quando le variabili utilizzate da ciascun thread sono locali. L'utilizzo di tale soluzione comporterebbe una perdita di prestazioni e può provocare incoerenze.

+0

Vota me per favore – Ramonster

+1

Principalmente una buona risposta, ma potrebbe essere migliorata. L'esclusione reciproca (l'aspetto più visibile di un blocco 'sincronizzato') non è _always_ necessario solo perché due o più thread accedono agli stessi dati. Ma è necessario quando un thread ha bisogno di mettere i dati in uno stato non valido temporaneo che altri thread non devono essere autorizzati a vedere. –

+0

Cool, grazie per il feedback, lo apprezzo davvero! – Ramonster

0

Evito i thread il più possibile perché non sono così esperto con loro, ma cercherò di spiegarlo nel modo più semplice possibile.

si utilizza solo sincronizzato se più thread hanno accesso al metodo o al blocco di codice.

è una soluzione semplice per impedire ad altri thread di accedere allo stesso codice mentre un altro lo sta ancora utilizzando. questo aiuterà a prevenire problemi legati alla memoria ma causerà problemi di prestazioni. poiché i codici sincronizzati sono molto più lenti del codice non sincronizzato. Anche io credo che i deadlock potrebbero essere un problema

+0

I thread non eseguono _access_ code, lo _esecuiscono_ e non c'è alcun danno intrinseco nel consentire a due o più thread di eseguire lo stesso codice allo stesso tempo. Non è il codice che conta: la sincronizzazione è interamente su _data_. L'esclusione reciproca (ad esempio, ciò che un blocco 'sincronizzato' ti dà) è necessaria quando è impossibile che un thread avanzi lo stato del programma senza creare uno _invalid_stato temporaneo_ che gli altri thread non devono essere autorizzati a vedere. –

+0

grande spiegazione @jameslarge ..grazie per chiarire. Non ho davvero espresso il mio pensiero molto bene ... – lababo

Problemi correlati