568 votes

La différence entre les Exécutables et Appelable interfaces en Java

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?

497voto

smink Points 39640

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.

304voto

Stephen C Points 255558

Quelles sont les différences dans les applications de la Runnable et Callable. Est la différence qu'avec le paramètre de retour présent dans Callable.

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 peut Runnable .

Parce que l' Runnable interface ne peut pas faire tout ce qu' Callable !

Runnable a été autour depuis Java 1.0, mais Callable 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.

101voto

nikli Points 233
  • 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;
    }
    

40voto

amoran Points 556

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

14voto

AlexR Points 60796

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X