Middle
Milliseid mitme lõime elementi pakub Kotlin?
sobes.tech AI
Vastus AI-lt
Kotlin pakub järgmisi mitme niidi elemente:
- Korutinaid: Kerged voogud, mis põhinevad peatamise funktsioonidel. Tagavad asünkroonse ja mitteblokeeriva koodi täitmise.
- Korutinate ehitajad: Funktsioonid, mis käivitavad korutinaid. Peamised:
launch(käivitab korutina ilma väärtust tagastamata),async(käivitab korutina ja tagastabDeferred, mida saab oodata tulemuse saamiseks).// Näide `launch` kasutamisest GlobalScope.launch { println("Tervist korutina ${Thread.currentThread().name}") } // Näide `async` kasutamisest val deferred = GlobalScope.async { delay(1000) // Pika operatsiooni imiteerimine "Tulemus" } val result = runBlocking { deferred.await() } // Ootame tulemust Dispatchers: Määrab, millisel niidupulgal korutina täidetakse. Peamised:Dispatchers.Default: Üldine niidupulk CPU-intensiivsete ülesannete jaoks.Dispatchers.IO: Niidupulk blokeerivate sisendi/väljundi operatsioonide jaoks (failid, võrk).Dispatchers.Main: Dispetšer kasutajaliidese voogude jaoks vastavates platvormides (Android, Swing).Dispatchers.Unconfined: Korutina käivitatakse praeguses voos, kuid võib jätkata mis tahes niidil.
GlobalScope.launch(Dispatchers.IO) { // Sisendi/väljundi täitmine }runBlocking: Korutina ehitaja funktsioon, mis blokeerib praeguse voolu kuni korutina lõppemiseni. Kasutatakse blokeeriva ja mitteblokeeriva koodi ühendamiseks, sageli testides või main-funktsioonides:runBlocking { launch { delay(500) println("Lõpetatud ${Thread.currentThread().name}") } println("Käivitatud ${Thread.currentThread().name}") }suspendfunktsioonid: Funktsioonid, mille täitmine võib peatuda ja jätkata. Neid saab kutsuda ainult teistestsuspendfunktsioonidest või korutina ehitajatest:suspend fun doSomething() { delay(100) // Peatamise näide }Job: Käivitatud korutina käepide. Pakub meetodeid korutina elutsükli haldamiseks (tühistamine, lõpetamise ootamine):val job = GlobalScope.launch { // Pikk operatsioon } job.cancel() // Korutina tühistamine runBlocking { job.join() } // Lõpetamise ootamineCoroutineScope: Määratleb korutinate vahemiku. Korutinaid, mis käivitatakse kindlas vahemikus, automaatselt tühistatakse vahemiku tühistamisel. Aitab hallata korutinate elutsüklit:val scope = CoroutineScope(Dispatchers.Default) scope.launch { // Korutina selles vahemikus } scope.cancel() // Kõigi korutinate tühistamine selles vahemikus- kanalid (
Channel): Primitivsed turvaliseks andmeedastuseks korutinate vahel. Kanalid võivad olla ühepoolsed (saadetakse või vastu võetakse) või kahepoolsed:import kotlinx.coroutines.channels.Channel val channel = Channel<Int>() runBlocking { launch { for (x in 1..5) channel.send(x * x) channel.close() // Oluline on kanali sulgemine } launch { for (y in channel) println(y) } } - Mutexid (
Mutex): Sünkroniseerimise primitiivid, mis tagavad eksklusiivse juurdepääsu ühisele ressursile. Tagab voogude turvalisuse, lubades ainult ühel korutinal omada mutexi korraga:import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock val mutex = Mutex() var counter = 0 suspend fun incrementCounter() { mutex.withLock { counter++ } } - Olekuvood (
StateFlow,SharedFlow): Andmevoodid reaktiivseks programmeerimiseks ja mitmevoogulises kontekstis.StateFlowesindab "külma" voogu praeguse olekuga,SharedFlowaga "kuuma" voogu andmete levitamiseks.