Sobes.tech
Middle

Kaip įgyvendinti daugiagijį Kotlin?

sobes.tech AI

Atsakymas iš AI

Daugialypės programavimo Kotlin galima įgyvendinti keliais būdais:

  1. 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()
    }
    
  2. 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ą naudojant Deferred.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        val deferredResult = async {
            delay(1000L)
            "Rezultatas iš korutinos"
        }
        val result = deferredResult.await() // Laukia rezultato
        println(result)
    }
    
  3. 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.