Sobes.tech
Middle

Kotlin'da ko'p oqimli ishlashni qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

Kotlinda ko‘p iplikli ishlash bir necha usul bilan amalga oshirilishi mumkin:

  1. Java standarti iplar (Threads):

    // Runnable interfeysini amalga oshirish
    class MyRunnable : Runnable {
        override fun run() {
            // Alohida ipda bajariladigan kod
            println("Ipdan salom: ${Thread.currentThread().name}")
        }
    }
    
    fun main() {
        // Runnable nusxasini yaratish
        val runnable = MyRunnable()
        // Runnable bilan Thread ob'ektini yaratish
        val thread = Thread(runnable)
        // Ipni ishga tushirish
        thread.start()
    }
    

    Yoki lambda ifodasi bilan:

    fun main() {
        val thread = Thread {
            // Alohida ipda bajariladigan kod
            println("Ipdan salom: ${Thread.currentThread().name}")
        }
        thread.start()
    }
    
  2. Kotlin Korutinalari: Bu, Kotlinda tavsiya etilgan va yanada zamonaviy yondashuv bo‘lib, yengil ko‘p ipli ishlashni ta'minlaydi.

    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        // Global scopeda yangi korutina yaratish
        launch {
            delay(1000L) // 1 sekundlik bloklanmaydigan kechikish
            println("Korutinalardan salom")
        }
        // Asosiy ip ishni davom ettiradi
        println("Asosiy ipdan salom")
        // runBlocking, barcha ichki korutinalarning yakunlanishini kutadi
    }
    

    Korutinalarning turli quruvchilari misollari:

    • launch: Yangi korutina ishga tushuradi, hech qanday qiymat bilan.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        launch {
            println("Bu korutina faqat bir amalni bajaradi")
        }
    }
    
    • async: Yangi korutina ishga tushuradi va Deferred yordamida natija qaytaradi.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        val deferredResult = async {
            delay(1000L)
            "Korutina natijasi"
        }
        val result = deferredResult.await() // Natijani kutish
        println(result)
    }
    
  3. RxKotlin/RxJava: Reaktiv dasturlash, asinxron operatsiyalar va ko‘p ipli ishlash bilan ishlash imkonini beradi, schedulers (rejalashtiruvchilar) yordamida.

    import io.reactivex.rxjava3.core.Observable
    import io.reactivex.rxjava3.schedulers.Schedulers
    
    fun main() {
        Observable.just("Asinxron element")
            .subscribeOn(Schedulers.io()) // I/O ipda obuna bo‘lish
            .observeOn(Schedulers.computation()) // Hisoblash ipida natijalarni kuzatish
            .subscribe { item ->
                println("Olingan: $item ip ${Thread.currentThread().name} da")
            }
    
        Thread.sleep(2000) // Asinxron operatsiyalar yakunlanishini kutish
    }
    

Usul tanlovi aniq vazifaga bog‘liq. Kotlinning zamonaviy ilovalari uchun, korutinalar ularning yengilligi, foydalanish osonligi va tilga integratsiyalashgan qo‘llab-quvvatlash uchun afzal ko‘riladi. Java iplar past darajadagi nazorat uchun mos bo‘lishi mumkin, reaktiv kutubxonalar esa ma'lumot oqimlari bilan ishlash uchun mo‘ljallangan.