Sobes.tech
Middle

Чӣ гуна иҷрои бисёрсоҳавиро дар Kotlin амалӣ кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Многопоточность дар Kotlin метавонад бо чанд роҳ амалӣ карда шавад:

  1. Тонҳои стандартии Java (Threads):

    // Иҷрои интерфейси Runnable
    class MyRunnable : Runnable {
        override fun run() {
            // Код, ки дар як ҷараён иҷро мешавад
            println("Салом аз ҷараён: ${Thread.currentThread().name}")
        }
    }
    
    fun main() {
        // Эҷоди намунаи Runnable
        val runnable = MyRunnable()
        // Эҷоди объекти Thread бо Runnable
        val thread = Thread(runnable)
        // Иҷрои ҷараён
        thread.start()
    }
    

    Ё бо истифода аз ифодаи лямбда:

    fun main() {
        val thread = Thread {
            // Код, ки дар як ҷараён иҷро мешавад
            println("Салом аз ҷараён: ${Thread.currentThread().name}")
        }
        thread.start()
    }
    
  2. Корутины Kotlin (Coroutines): Ин усули тавсияшуда ва муосиртар дар Kotlin мебошад, ки имконият медиҳад мултиҷараёнӣ бо вазнинӣ камтар.

    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        // Эҷоди кори нав дар глобалӣ scope
        launch {
            delay(1000L) // Тамдиди беҳушӣ барои 1 сония
            println("Салом аз кори корутинӣ")
        }
        // Ҷараёни асосӣ идома мекунад
        println("Салом аз ҷараёни асосӣ")
        // runBlocking интизор мешавад, ки ҳамаи корутинҳои дохилӣ ба анҷом расанд
    }
    

    Намудҳои сохтани корутинҳо:

    • launch: Иҷрои кори нав бе натиҷа қайтариш.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        launch {
            println("Ин корутин амалро иҷро мекунад")
        }
    }
    
    • async: Иҷрои кори нав, ки натиҷаро бо Deferred бармегардонад.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        val deferredResult = async {
            delay(1000L)
            "Натиҷаи корутин" 
        }
        val result = deferredResult.await() // интизор шудан барои натиҷа
        println(result)
    }
    
  3. RxKotlin/RxJava: Барномасозии реактивӣ инчунин имкон медиҳад кор бо амалиётҳои асинхронӣ ва мултиҷараёнӣ бо истифода аз планировщикҳо (Schedulers).

    import io.reactivex.rxjava3.core.Observable
    import io.reactivex.rxjava3.schedulers.Schedulers
    
    fun main() {
        Observable.just("Элементи асинхронӣ")
            .subscribeOn(Schedulers.io()) // Иҷро дар ҷараёни I/O
            .observeOn(Schedulers.computation()) // Назорат дар ҷараёни ҳисоббарорӣ
            .subscribe { item ->
                println("Гирифтем: $item дар ҷараёни ${Thread.currentThread().name}")
            }
    
        Thread.sleep(2000) // интизор шудан барои анҷоми амалиётҳои асинхронӣ
    }
    

Интихоби усул вобаста ба вазифаи мушаххас аст. Барои бештари барномаҳои муосири Kotlin, кори корутинҳо афзалият дорад, зеро онҳо сабук, содда ва дар забон дастгирӣ мешаванд. Ҷараёнҳои Java метавонанд барои назорати пасттар мувофиқ бошанд, ва китобхонаҳои реактивӣ барои кор бо ҷараёнҳои додаҳо истифода мешаванд.