Kaip įgyvendinti daugiagijį Kotlin?
sobes.tech AI
Atsakymas iš AI
Daugialypės programavimo Kotlin galima įgyvendinti keliais būdais:
-
Standartiniai Java srautai (Threads):
// Įgyvendinti Runnable sąsają class MyRunnable : Runnable { override fun run() { // Kodas, kuris bus vykdomas atskirame sraute println("Sveiki iš srauto: ${Thread.currentThread().name}") } } fun main() { // Sukurti Runnable egzempliorių val runnable = MyRunnable() // Sukurti Thread objektą su Runnable val thread = Thread(runnable) // Pradėti srautą thread.start() }Arba naudojant lambda išraišką:
fun main() { val thread = Thread { // Kodas, kuris bus vykdomas atskirame sraute println("Sveiki iš srauto: ${Thread.currentThread().name}") } thread.start() } -
Kotlin Coroutines (Koručinos): Tai rekomenduojamas ir modernesnis požiūris Kotlin, kuris suteikia lengvas daugialypės programos galimybes.
import kotlinx.coroutines.* fun main() = runBlocking { // Sukurti naują korutiną globaliame scope launch { delay(1000L) // Neužblokuojantis vėlinimas 1 sekundę println("Sveiki iš korutinos") } // Pagrindinis srautas tęsiasi println("Sveiki iš pagrindinio srauto") // runBlocking laukia visų vidinių korutinų pabaigos }Pavyzdžiai naudojant skirtingus korutinų statytojus:
launch: Paleidžia naują korutiną be grąžinamos reikšmės.
import kotlinx.coroutines.* fun main() = runBlocking { launch { println("Ši korutina tiesiog atlieka veiksmą") } }async: Paleidžia naują korutiną, kuri grąžina rezultatą naudojantDeferred.
import kotlinx.coroutines.* fun main() = runBlocking { val deferredResult = async { delay(1000L) "Rezultatas iš korutinos" } val result = deferredResult.await() // Laukia rezultato println(result) } -
RxKotlin/RxJava: Reaktyvus programavimas taip pat leidžia dirbti su asinchroninėmis operacijomis ir daugialypėmis srautais, naudojant planuotojus (Schedulers).
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers fun main() { Observable.just("Asinchroninis elementas") .subscribeOn(Schedulers.io()) // Vykdyti prenumeratą I/O sraute .observeOn(Schedulers.computation()) // Stebėti rezultatus skaičiavimo sraute .subscribe { item -> println("Gauta: $item sraute ${Thread.currentThread().name}") } Thread.sleep(2000) // Laukti asinchroninių operacijų pabaigos }
Pasirinkimas priklauso nuo konkrečios užduoties. Dauguma šiuolaikinių Kotlin programų teikia pirmenybę korutinoms dėl jų lengvumo, paprastumo ir įmontuotos paramos kalboje. Java srautai gali būti tinkami žemesnio lygio kontrolei, o reaktiškos bibliotekos — darbui su duomenų srautais.