Middle
Kotlin hansı çox ipli elementləri təmin edir?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin aşağıdakı çoxluq elementlərini təqdim edir:
- Korutinalar: Yüngül çəkili axınlar, dayandırıla bilən funksiyalara əsaslanır. Asinxron və qeyri-bloklama icra təmin edir.
- Korutin qurucuları: Korutinləri işə salan funksiyalar. Əsaslar:
launch(dəyər qaytarmadan korutin işə salır),async(korutin işə salır vəDeferredqaytarır, onu nəticə üçün gözləmək olar).// launch istifadəsi nümunəsi GlobalScope.launch { println("Salam korutinadan ${Thread.currentThread().name}") } // async istifadəsi nümunəsi val deferred = GlobalScope.async { delay(1000) // Uzun əməliyyatı simulyasiya edir "Nəticə" } val result = runBlocking { deferred.await() } // Nəticəni gözləyirik Dispatchers: Korutinanın hansı işçi hovuzunda icra olunacağını müəyyən edir. Əsaslar:Dispatchers.Default: CPU intensiv tapşırıqlar üçün ümumi işçi hovuzu.Dispatchers.IO: Giriş/çıxış əməliyyatları üçün işçi hovuzu.Dispatchers.Main: İstifadəçi interfeysi üçün işçi hovuzu (Android, Swing və s.).Dispatchers.Unconfined: Korutina hazırkı işçi üzərində başlayır, amma hər hansı işçiyə davam edə bilər.
GlobalScope.launch(Dispatchers.IO) { // Giriş/çıxış əməliyyatları }runBlocking: Korutin qurucu funksiyası, hazırkı işçini bloklayır korutina tamamlanana qədər. Bloklayan və qeyri-bloklayan kodu birləşdirmək üçün istifadə olunur, testlərdə və əsas funksiyalarda çox istifadə olunur.runBlocking { launch { delay(500) println("Tamamlandı ${Thread.currentThread().name} üzərində") } println("İşə salındı ${Thread.currentThread().name} üzərində") }suspendfunksiyalar: Dayandırıla və yenidən başlatıla bilən funksiyalar. Yalnız digərsuspendfunksiyalar və ya korutin qurucuları tərəfindən çağırıla bilər.suspend fun doSomething() { delay(100) // Dayandırma nümunəsi }Job: İşə salınmış korutinanın handle-i. Korutinanın həyat dövrünü idarə etmək üçün metodlar təqdim edir (ləğv etmək, tamamlanmasını gözləmək).val job = GlobalScope.launch { // Uzun əməliyyat } job.cancel() // Korutinanı ləğv edir runBlocking { job.join() } // Tamamlanmasını gözləyirCoroutineScope: Korutinlər üçün görünürlük sahəsini müəyyən edir. Bu sahədə işə salınan korutinalar sahənin ləğv olunması ilə avtomatik ləğv olunur. Həyat dövrünü idarə etməyə kömək edir.val scope = CoroutineScope(Dispatchers.Default) scope.launch { // Bu sahədəki korutina } scope.cancel() // Bu sahədəki bütün korutinaları ləğv edir- Kanal (
Channel): Korutinalar arasında məlumatların təhlükəsiz ötürülməsi üçün primitivi. Kanallar unidirectional (yalnız göndərmə və ya qəbul üçün) və ya bidirectional ola bilər.import kotlinx.coroutines.channels.Channel val channel = Channel<Int>() runBlocking { launch { for (x in 1..5) channel.send(x * x) channel.close() // Kanalı bağlamaq vacibdir } launch { for (y in channel) println(y) } } - Müütexlər (
Mutex): Sinxronizasiya primitivi, ümumi resursa eksklüziv giriş təmin edir. Axın təhlükəsizliyini təmin edir, yalnız bir korutina müüteksi müəyyən vaxtda sahib ola bilər.import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock val mutex = Mutex() var counter = 0 suspend fun incrementCounter() { mutex.withLock { counter++ } } - Vəziyyətlər (
StateFlow,SharedFlow): Məlumat axınları ilə işləmək üçün primitivi, reaktiv proqramlaşdırma və çoxlu işçi mühitində.StateFlowhazırkı vəziyyətlə "soyuq" axını təmsil edir,SharedFlowisə geniş yayım üçün "isti" axındır.