Sobes.tech
Middle

Kā īstenot daudzprocesu Kotlin?

sobes.tech AI

Atbilde no AI

Kotlinā daudzvītņu programmēšanu var īstenot ar vairākiem veidiem:

  1. .Standarta Java pavedieni (Threads):

    // Implementējam Runnable interfeisu
    class MyRunnable : Runnable {
        override fun run() {
            // Kods, kas tiks izpildīts atsevišķā pavedienā
            println("Sveiciens no pavediena: ${Thread.currentThread().name}")
        }
    }
    
    fun main() {
        // Izveidojam Runnable instanci
        val runnable = MyRunnable()
        // Izveidojam Thread objektu ar Runnable
        val thread = Thread(runnable)
        // Sāksim pavedienu
        thread.start()
    }
    

    Vai ar lambda izteiksmi:

    fun main() {
        val thread = Thread {
            // Kods, kas tiks izpildīts atsevišķā pavedienā
            println("Sveiciens no pavediena: ${Thread.currentThread().name}")
        }
        thread.start()
    }
    
  2. .Kotlin Korutinas (Coroutines): Tas ir ieteicamais un mūsdienīgākais pieejas veids Kotlin, kas nodrošina vieglsvara daudzvītņu darbību.

    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        // Izveidojam jaunu korutinu globālajā kontekstā
        launch {
            delay(1000L) // Ne blokējoša aizkave uz 1 sekundi
            println("Sveiciens no korutinas")
        }
        // Galvenais pavediens turpina darbu
        println("Sveiciens no galvenā pavediena")
        // runBlocking gaida, kamēr visas iekšējās korutinas pabeidz darbu
    }
    

    Dažādu korutinu būvētāju piemēri:

    • launch: Sāk jaunu korutinu bez atgrieztas vērtības.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        launch {
            println("Šī korutina vienkārši veic darbību")
        }
    }
    
    • async: Sāk jaunu korutinu, kas atgriež rezultātu ar Deferred.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        val deferredResult = async {
            delay(1000L)
            "Rezultāts no korutinas"
        }
        val result = deferredResult.await() // Gaida rezultātu
        println(result)
    }
    
  3. .RxKotlin/RxJava: Reaktīvā programmēšana arī ļauj strādāt ar asinhronām operācijām un daudzvītņu darbību, izmantojot plānotājus (Schedulers).

    import io.reactivex.rxjava3.core.Observable
    import io.reactivex.rxjava3.schedulers.Schedulers
    
    fun main() {
        Observable.just("Asinhronais elements")
            .subscribeOn(Schedulers.io()) // Veic pieteikšanos I/O pavedienā
            .observeOn(Schedulers.computation()) // Novēro rezultātus skaitļošanas pavedienā
            .subscribe { item ->
                println("Saņemts: $item uz pavediena ${Thread.currentThread().name}")
            }
    
        Thread.sleep(2000) // Gaida asinhrono operāciju pabeigšanu
    }
    

Izvēle ir atkarīga no konkrētās uzdevuma prasībām. Lielākajai daļai mūsdienu Kotlin lietojumprogrammu ieteicamas ir korutinas, pateicoties to vieglumam, vienkāršībai un iebūvētai atbalsta funkcionalitātei valodā. Java pavedieni var būt piemēroti zemākas līmeņa kontrolei, bet reaktīvās bibliotēkas - datu plūsmu darbībai.