Sobes.tech
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, precum AtomicInteger:
val counter = AtomicInteger(0)
counter.incrementAndGet()
  • Utilizarea Volatile pentru 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.