Kotlin-də çoxmərhələliyi necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də çoxmərhələli işləmə müxtəlif üsullarla həyata keçirilə bilər:
-
Java standart ipleri (Threads):
// Runnable interfeysini həyata keçirmək class MyRunnable : Runnable { override fun run() { // Ayrı bir ipdə icra olunacaq kod println("Ip-dən salam: ${Thread.currentThread().name}") } } fun main() { // Runnable nümunəsi yarat val runnable = MyRunnable() // Runnable ilə Thread obyekti yaradın val thread = Thread(runnable) // İpi işə salın thread.start() }Yaxud lambda ifadəsi ilə:
fun main() { val thread = Thread { // Ayrı bir ipdə icra olunacaq kod println("Ip-dən salam: ${Thread.currentThread().name}") } thread.start() } -
Kotlin Korutinaları: Bu, tövsiyə olunan və daha müasir yanaşmadır, yüngül çoxmərhələli işləmə təmin edir.
import kotlinx.coroutines.* fun main() = runBlocking { // Qlobal scope-də yeni korutina yaradın launch { delay(1000L) // Bloklamayan gecikmə println("Korutinalardan salam") } // Əsas ip işləməyə davam edir println("Əsas ipdən salam") // runBlocking, bütün uşaq korutinaların tamamlanmasını gözləyir }Müxtəlif korutina qurucularının nümunələri:
launch: Yeni korutina başlayır, geri dönüş dəyəri yoxdur.
import kotlinx.coroutines.* fun main() = runBlocking { launch { println("Bu korutina sadəcə bir əməliyyat yerinə yetirir") } }async: Yeni korutina başlayır vəDeferredvasitəsilə nəticə qaytarır.
import kotlinx.coroutines.* fun main() = runBlocking { val deferredResult = async { delay(1000L) "Korutina nəticəsi" } val result = deferredResult.await() // Nəticəni gözləyir println(result) } -
RxKotlin/RxJava: Reaktiv proqramlaşdırma, asinxron əməliyyatlar və çoxmərhələli işləmə ilə işləməyə imkan verir, planlayıcılar (Schedulers) istifadə edilərək.
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers fun main() { Observable.just("Asinxron element") .subscribeOn(Schedulers.io()) // I/O ipdə abunə ol .observeOn(Schedulers.computation()) // Hesablama ipində nəticələri müşahidə et .subscribe { item -> println("Alındı: $item ip ${Thread.currentThread().name} da") } Thread.sleep(2000) // Asinxron əməliyyatların tamamlanmasını gözləyir }
Yöntəm seçimi konkret tapşırığa bağlıdır. Kotlin-in müasir tətbiqlərinin çoxu üçün, korutinalar onların yüngüllüyü, istifadəsinin asanlığı və dilə daxili dəstəyi səbəbindən üstün tutulur. Java ipleri aşağı səviyyəli nəzarət üçün uyğun ola bilər, reaktiv kitabxanalar isə məlumat axınları ilə işləmək üçün istifadə olunur.