Quelle est la différence entre l'utilisation de l'Exécutable et Exigible des interfaces lors de la conception d'un des threads en Java, pourquoi choisir l'un plutôt que l'autre?
Réponses
Trop de publicités?Voir l'explication ici.
Le Callable interface est similaire à Praticable, en ce que les deux sont conçus pour les classes dont les instances sont potentiellement exécuté par un autre fil de discussion. Un Exécutable, cependant, n'a pas de retour d'un résultat et ne peut pas jeter un vérifié exception.
Quelles sont les différences dans les applications de la
Runnable
etCallable
. Est la différence qu'avec le paramètre de retour présent dansCallable
.En gros, oui. Voir les réponses à cette question. Et la javadoc pour
Callable
.Quelle est la nécessité d'avoir à la fois si
Callable
peutRunnable
.Parce que l'
Runnable
interface ne peut pas faire tout ce qu'Callable
!
Runnable
a été autour depuis Java 1.0, maisCallable
n'a été introduite dans Java 1.5 ... pour gérer les cas d'utilisation que l'Runnable
ne prend pas en charge. En théorie, l'équipe Java pourrait avoir changé la signature de l'Runnable.run()
méthode, mais cela aurait brisé binaire compatibilité avec les pré-1.5 code, nécessitant de recodage lors de la migration de vieux code Java pour de nouvelles machines virtuelles. Qui est un GROS NO-NO. Java s'efforce d'être rétro-compatible ... et qui a été l'un de Java plus grands points de vente pour les entreprises de l'informatique.
- Un Callable doit implémenter la méthode call (), tandis qu'un Exécutable doit implémenter la méthode run ().
- Un Callable peut retourner une valeur, mais un Exécutable ne peut pas.
- Un Callable pouvez jeter vérifié exception, mais un Exécutable ne peut pas.
-
Un Callable peut être utilisé avec
ExecutorService#invokeXXX
méthodes mais un Exécutable ne peut pas être.public interface Runnable { void run(); } public interface Callable<V> { V call() throws Exception; }
J'ai trouvé ça dans un autre blog qui peut l'expliquer un peu plus ces différences:
Si les deux interfaces sont implémentées par les classes qui le souhaitent à exécuter dans un thread différent de l'exécution, mais il y a peu de différences entre les deux d'interface qui sont:
- Une instance Appelable renvoie un résultat de type V, alors qu'un Exécutable instance n'a pas
- Une instance Appelable peut jeter checked exceptions, alors qu'une instance ne peut pas Praticable
Les concepteurs de Java ont ressenti la nécessité d'étendre les capacités de l'interface Runnable, mais ils ne voulaient pas d'incidence sur les usages de l'interface Runnable et probablement que c'était la raison pourquoi ils sont allés pour avoir une interface distincte nommée Appelable dans Java 1.5 que de changer l'existant déjà Praticable
Comme il a déjà été mentionné ici Appelable est relativement nouvelle interface et il a été présenté comme une partie de la simultanéité paquet. Les deux Appelable et Exécutable peut être utilisé avec des exécuteurs testamentaires. La classe Thread (qui implémente Runnable lui-même) prend en charge Praticable seulement.
Vous pouvez toujours utiliser l'Exécutable avec le maître d'oeuvre. L'avantage de Appelable que vous pouvez l'envoyer à l'exécuteur testamentaire et obtenez immédiatement les prochains résultat qui sera mis à jour lorsque l'exécution est terminée. La même chose peut être mis en œuvre avec l'Exécutable, mais dans ce cas, vous avez à gérer le résultats vous-même. Par exemple, vous pouvez créer des résultats de la file d'attente qui va contenir tous les résultats. Autre thread peut attendre sur cette file d'attente et de traiter avec des résultats qui arrivent.