Comment implémenter la multitâche en Kotlin?
sobes.tech IA
Réponse de l'IA
La multitâche en Kotlin peut être réalisée de plusieurs manières :
-
Fils Java standard (Threads) :
// Implémenter l'interface Runnable class MyRunnable : Runnable { override fun run() { // Code qui sera exécuté dans un thread séparé println("Bonjour depuis le thread : ${Thread.currentThread().name}") } } fun main() { // Créer une instance de Runnable val runnable = MyRunnable() // Créer un objet Thread avec Runnable val thread = Thread(runnable) // Démarrer le thread thread.start() }Ou avec une expression lambda :
fun main() { val thread = Thread { // Code qui sera exécuté dans un thread séparé println("Bonjour depuis le thread : ${Thread.currentThread().name}") } thread.start() } -
Coroutines Kotlin : C'est une approche recommandée et plus moderne en Kotlin, offrant une multitâche légère.
import kotlinx.coroutines.* fun main() = runBlocking { // Créer une nouvelle coroutine dans le scope global launch { delay(1000L) // Retard non bloquant de 1 seconde println("Bonjour depuis la coroutine") } // Le thread principal continue de fonctionner println("Bonjour depuis le thread principal") // runBlocking attend la fin de toutes les coroutines enfants }Exemples d'utilisation de différents constructeurs de coroutines :
launch: Lance une nouvelle coroutine sans valeur de retour.
import kotlinx.coroutines.* fun main() = runBlocking { launch { println("Cette coroutine effectue simplement une action") } }async: Lance une nouvelle coroutine qui retourne un résultat viaDeferred.
import kotlinx.coroutines.* fun main() = runBlocking { val deferredResult = async { delay(1000L) "Résultat de la coroutine" } val result = deferredResult.await() // Attendre le résultat println(result) } -
RxKotlin/RxJava : La programmation réactive permet également de travailler avec des opérations asynchrones et multitâches, en utilisant des planificateurs (Schedulers).
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers fun main() { Observable.just("Élément asynchrone") .subscribeOn(Schedulers.io()) // S'abonner sur le thread I/O .observeOn(Schedulers.computation()) // Observer les résultats sur le thread de calcul .subscribe { item -> println("Reçu : $item sur le thread ${Thread.currentThread().name}") } Thread.sleep(2000) // Attendre la fin des opérations asynchrones }
Le choix de la méthode dépend de la tâche spécifique. Pour la plupart des applications modernes en Kotlin, les coroutines sont préférées pour leur légèreté, leur facilité d'utilisation et leur support intégré dans le langage. Les threads Java peuvent être appropriés pour un contrôle de bas niveau, et les bibliothèques réactives pour travailler avec des flux de données.