Junior — Middle
Cum se poate elimina condiția de cursă atunci când se lucrează cu fire într-un mod cu cel mai mic cod?
sobes.tech AI
Răspuns de la AI
Pentru a evita condițiile de cursă în lucrul cu firele în Android (Java/Kotlin), se pot folosi următoarele mijloace minime de sincronizare:
- Cuvântul cheie
synchronized— cel mai simplu mod de a proteja o secțiune critică a codului:
@Synchronized
fun increment() {
counter++
}
- Utilizarea variabilelor atomice din pachetul
java.util.concurrent.atomic, precumAtomicInteger:
val counter = AtomicInteger(0)
counter.incrementAndGet()
- Utilizarea
Volatilepentru variabile, pentru a asigura vizibilitatea modificărilor între fire (dar nu va proteja împotriva condițiilor de cursă la incrementare).
Prin urmare, cea mai minimală și frecvent utilizată metodă este învelirea accesului la datele comune într-un bloc synchronized sau utilizarea tipurilor atomice.