Comment initialiser un Thread dans Kotlin?
En Java, il fonctionne par l'acceptation d'un objet qui implémente runnable :
Thread myThread = new Thread(new myRunnable())
où myRunnable
est une classe implémentant Runnable
.
Mais quand j'ai essayé ceci dans Kotlin, il ne semble pas fonctionner:
var myThread:Thread = myRunnable:Runnable
var myThread = Thread(myRunnable())
- Il A Travaillé!! Pouvez-vous m'aider à comprendre ce bout de code?
- Faire
myThread:Thread
dit que la variablemyThread
est de typeThread
. Et de fairemyRunnable:Runnable
n'a pas de sens, afin que jamais. L'initialisation des classes dans Kotlin est très similaire à Java. Vous venez de supprimer lanew
mot-clé. Pertinentes Kotlin de la documentation: une, b - Merci. Donc x:X le format des œuvres pour les classes, mais pas pour les interfaces?
- Il fonctionne pour les interfaces, mais quand vous ne
x = Y:y
laY:y
partie n'a pas de sens. - Vous devriez jeter un oeil à ce guide pour la syntaxe de base sur la définition de la variable et de l'instance.
Vous devez vous connecter pour publier un commentaire.
Pour l'initialisation d'un objet de
Thread
vous suffit de l'appeler le constructeur:Ensuite, vous pouvez également passer une option
Runnable
avec un lambda de SAM (Conversion) comme ceci:Le plus explicite version est le passage d'un anonyme de la mise en œuvre de
Runnable
comme ceci:Remarque que précédemment montré des exemples ne faire que créer une instance d'un
Thread
mais n'est pas réellement commencer. Pour y parvenir, vous avez besoin d'invoquerstart()
explicitement.Dernier mais non le moindre, vous devez savoir de la bibliothèque standard de la fonction
thread
, que je vous recommande d'utiliser:Vous pouvez l'utiliser comme ceci:
Il a beaucoup de paramètres facultatifs pour par exemple directement de départ le fil comme illustré ici. Notez que
true
est la valeur par défaut destart
de toute façon.start = true
(parce questart
esttrue
par défaut) et il suffit d'écrirethread { Thread.sleep(1000) }
pour commencer thread.Praticable:
Fil:
Vous ne voyez pas un Exécutable ici: dans Kotlin, il peut facilement être remplacé par une expression lambda. Est-il un meilleur moyen? Bien sûr! Voici comment vous pouvez instancier et de commencer une
fil Kotlin-style:
Je n'ai la suite et il semble fonctionner comme prévu.
Meilleur moyen serait d'utiliser
thread()
fonction de générateur dekotlin.concurrent
:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/thread.html
Vous devriez vérifier ses valeurs par défaut, comme ils sont très utiles:
Notez que vous n'avez pas besoin d'appeler
start()
comme dans le Thread exemple, ou de fournirstart=true
.Être prudent avec les threads qui s'exécutent pendant une longue période de temps. Il est utile de préciser
thread(isDaemon= true)
de sorte que votre application serait en mesure de terminer correctement.S'il vous plaît essayez ce code:
Thread.sleep(3000)
dans le thread en cours à la place (à l'aide de Kotlin général derun
méthode d'extension qui obtient nouvellement créée fil à un récepteur, mais ne fait rien avec elle).Exemple de base de la
Thread
avecLamda