Introduction au mécanisme de rappel Java
Appels inter-modules
Dans un système d'application, quel que soit le langage utilisé pour le développement, il doit be modules Il existe plusieurs types d'appels :
(1) Appel synchrone
L'appel synchrone est la méthode d'appel A la plus basique et la plus simple. La méthode a() de la classe A appelle la méthode b() de la classe B. Elle attend que la méthode b() termine son exécution et que la méthode a() continue. Cette méthode d'appel convient aux situations où le temps d'exécution de la méthode b() n'est pas long , car si le temps d'exécution de la méthode b() est long ou qu'elle est directement bloquée, le code restant de la méthode a() Il ne peut pas être exécuté, ce qui entraînera le blocage de l'ensemble du processus.
(2) Appel asynchrone
L'appel asynchrone vise à résoudre le problème que les appels synchrones peuvent être bloqué, ce qui entraîne le blocage d'une méthode d'appel provoquée par l'ensemble du processus. La méthode a() de la classe A appelle la méthode b() de la classe B en démarrant un nouveau thread, et le code s'exécute ensuite directement , donc quel que soit le temps d'exécution de la méthode b( ) Combien de temps faudra-t-il pour que l'exécution de la méthode a() soit bloquée ?
Mais de cette façon, puisque la méthode a() n'attend pas la fin de l'exécution de la méthode b(), lorsque la méthode a() nécessite le résultat de l'exécution de la méthode b() (selon la situation spécifique, cela dépend de l'entreprise. Pour certaines entreprises, comme démarrer un thread asynchrone pour envoyer une notification WeChat ou actualiser un cache, cela n'est pas nécessaire.) Le résultat de l'exécution de la méthode b() doit être surveillé dans d'une certaine manière.
(3) Rappel
Le dernier est le rappel L'idée du rappel est :
- La méthode a() de la classe A appelle la méthode b() de la classe B
- La méthode b() de la classe B appelle activement la classe après l'exécution. La méthode callback() de A
Une telle méthode d'appel forme l'image ci-dessus, qui est un méthode d'appel bidirectionnelle.
Exemple de code
Ensuite, jetons un coup d'œil à l'exemple de code de rappel, le code est simulé C'est une telle scène : le professeur pose une question aux élèves, et les élèves répondent au professeur après y avoir réfléchi.
Définissez d'abord une interface de rappel, qui n'a qu'une seule méthode tellAnswer(int réponse), c'est-à-dire que l'élève donne la réponse à l'enseignant après avoir réfléchi :
/** * 回调接口,原文出处http://www.cnblogs.com/xrq730/p/6424471.html */ public interface Callback { public void tellAnswer(int answer); }
Définir un L'objet enseignant implémente l'interface de rappel :
/** * 老师对象,原文出处http://www.cnblogs.com/xrq730/p/6424471.html */ public class Teacher implements Callback { private Student student; public Teacher(Student student) { this.student = student; } public void askQuestion() { student.resolveQuestion(this); } @Override public void tellAnswer(int answer) { System.out.println("知道了,你的答案是" + answer); } }
/** * 学生接口,原文出处http://www.cnblogs.com/xrq730/p/6424471.html */ public interface Student { public void resolveQuestion(Callback callback); }
/** * 一个名叫Ricky的同学解决老师提出的问题,原文出处http://www.cnblogs.com/xrq730/p/6424471.html */ public class Ricky implements Student { @Override public void resolveQuestion(Callback callback) { // 模拟解决问题 try { Thread.sleep(3000); } catch (InterruptedException e) { } // 回调,告诉老师作业写了多久 callback.tellAnswer(3); } }
/** * 回调测试,原文出处http://www.cnblogs.com/xrq730/p/6424471.html */ public class CallbackTest { @Test public void testCallback() { Student student = new Ricky(); Teacher teacher = new Teacher(student); teacher.askQuestion(); } }
Le résultat de l'exécution du code n'est qu'une seule ligne :
<span style="color: #000000;">知道了,你的答案是3<br></span>
Analyse du code
Analyser le code ci-dessus J'ai fait deux niveaux d'abstraction pour le code ci-dessus : ( 1) Résumé de l'enseignant- Après avoir résumé l'enseignant, les élèves n'ont pas besoin de se soucier de savoir quel enseignant m'a posé la question, tant que j'obtiens la réponse en fonction de la question posée, et ensuite simplement. dites-le au professeur qui a posé la question. Même si le professeur change encore et encore, cela n'aura aucun impact sur mes élèves
- Une fois les élèves résumés, c'est très flexible pour l'enseignant, car l'enseignant ne pose pas nécessairement de questions à un élève, mais peut poser des questions à Ricky, Jack et Lucy en même temps, de sorte que les membres peuvent être Changez la variable Student en List
, de sorte que lorsque vous posez des questions, vous puissiez parcourir la liste des étudiants pour poser des questions, puis obtenir les réponses de chaque étudiant
Cet exemple est un exemple typique qui reflète le rôle de l'interface. La raison pour laquelle je dis cela est parce que je pense que certains amis peuvent ne pas comprendre les avantages des interfaces. Les amis qui ne comprennent pas les avantages des interfaces peuvent se concentrer sur cet exemple pour en comprendre davantage.
Pour résumer, le cœur du rappel est que la partie de rappel se transmet, ceci, à l'appelant , afin que l'appelant puisse le savoir le rappel une fois l'appel terminé les informations qu'il souhaite connaître. Le rappel est une idée et un mécanisme. Quant à la façon de le mettre en œuvre, la façon de le mettre en œuvre avec élégance et avec une grande évolutivité via le code dépend du niveau personnel du développeur et de sa compréhension de l'entreprise.
Rappels synchrones et rappels asynchrones
Dans l'exemple ci-dessus, quelqu'un peut poser cette question :
Quel rappel est nécessaire pour cet exemple ? En utilisant l'appel synchrone, ne serait-il pas formidable que l'objet étudiant réponde à la question et renvoie directement la réponse à l'objet enseignant ?
Il n'y a rien de mal à soulever cette question. Cette question peut être comprise sous deux angles.
Tout d’abord, que se passe-t-il si l’enseignant ne veut pas seulement des réponses des élèves ?
Peut-être que cet enseignant est un enseignant qui préfère écouter les idées de résolution de problèmes des élèves. Avant d'obtenir les réponses des élèves, l'enseignant aimerait connaître les noms des élèves et leurs idées de résolution de problèmes. Bien sûr, certaines personnes peuvent dire cela, alors je peux. Ne serait-il pas bien de définir un objet et d'ajouter le nom de l'élève et ses idées de solutions ? À mon avis, cette affirmation pose deux problèmes :
(1) Si l'enseignant veut de plus en plus de données, les objets renvoyés doivent être de plus en plus grands, et l'utilisation de rappels peut séparer les données. de données dans la méthode de rappel pour le traitement. Quant aux données qui dépendent de l'entreprise spécifique, si vous devez ajouter des paramètres de retour, ajoutez-les simplement directement dans la méthode de rappel
(2) Impossible de résoudre le problème. l'enseignant veut obtenir le nom des élèves, l'idée de solution de l'élève précède la réponse de l'élève
Par conséquent, je pense qu'il n'est pas nécessaire d'utiliser des rappels pour simplement renvoyer un certain résultat et vous pouvez directement utiliser des appels synchrones, mais s'il y en a plusieurs types de données doivent être traitées et les données sont classées en données primaires et secondaires, donc l'utilisation de rappels serait un choix plus approprié. Les données prioritaires doivent être traitées en premier dans la méthode de rappel.
Un autre angle de compréhension est plus important, à savoir le rappel synchrone et le rappel asynchrone mentionnés dans le titre. L'exemple est un rappel synchrone, ce qui signifie que l'enseignant pose une question à Ricky, Ricky donne la réponse, l'enseignant demande au prochain camarade de classe et, après avoir obtenu la réponse, continue de poser la question au prochain camarade de classe. C'est un scénario normal, mais si. Je change de scénario Suivant :
Le professeur ne voulait pas poser de questions comme une par une, mais a posé des questions à cinq élèves, Ricky, Mike, Lucy, Bruce et Kate, en même temps. , laissant les élèves réfléchir par eux-mêmes, quel élève devrait penser. Lorsque vous avez terminé, dites simplement la réponse directement à l'enseignant.
Ce scénario équivaut à dire qu'une fois que les élèves ont fini de réfléchir au problème, ils ont besoin d'un moyen de le dire à l'enseignant. Il existe deux solutions :
(1. ) Utilisez la méthode Future+Callable, en attendant le résultat de l'exécution du thread asynchrone, ce qui équivaut à une variante d'appel synchrone, car son essence est que la méthode renvoie un résultat, c'est-à-dire la réponse de l'étudiant
(2 ) Grâce au rappel asynchrone, l'élève finit de répondre à la question, appelle simplement la méthode de l'interface de rappel et indique la réponse à l'enseignant. Étant donné que l'objet enseignant est abstrait dans l'interface de rappel, cette approche a une très bonne évolutivité, comme mentionné précédemment, même si l'enseignant change l'un après l'autre, pour les étudiants, la seule chose qui les intéresse est d'appeler l'interface de rappel. informations nécessaires
Pour plus de connaissances connexes, veuillez faire attention à la colonne Tutoriel de base Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
