Чӣ гуна иҷрои бисёрсоҳавиро дар Kotlin амалӣ кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Многопоточность дар Kotlin метавонад бо чанд роҳ амалӣ карда шавад:
-
Тонҳои стандартии 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() } -
Корутины 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) } -
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 метавонанд барои назорати пасттар мувофиқ бошанд, ва китобхонаҳои реактивӣ барои кор бо ҷараёнҳои додаҳо истифода мешаванд.