Maison  >  Article  >  Java  >  Partage de code d'implémentation du principe de rappel Java (image)

Partage de code d'implémentation du principe de rappel Java (image)

黄舟
黄舟original
2017-03-31 10:40:071470parcourir

CallbackFonction, comme son nom l'indique, est une fonction utilisée pour le rappel. La fonction de rappel n'est qu'un fragment fonctionnel, une fonction implémentée par l'utilisateur selon la convention d'appel de la fonction de rappel. La fonction de rappel fait partie d'un workflow et le workflow détermine le moment de l'appel de fonction (rappel).

Le rappel devrait à l'origine être un concept très simple, mais peut-être parce que nous utilisons généralement uniquement l'interface de rappel écrite par le système pour nous, nous implémentons rarement les rappels, donc j'implémente moi-même les rappels. J'avais encore un peu le vertige quand j'ai commencé, j'écris donc cet article pour l'enregistrer, et également partager avec vous comment écrire une interface de rappel.

Rappel

La notion de rappel : Par exemple, si on veut poser une question à quelqu'un d'autre, on pose la question à l'autre personne Après en avoir parlé, l'autre partie a dit oui, quand j'aurai fini cette question, je vous dirai que les rappels sont utilisés à ce moment-là, car on ne sait pas quand l'autre partie aura fini, mais l'autre le parti prendra l’initiative de nous retrouver après l’avoir terminé.

Rappel synchrone

Lorsque le code s'exécute vers un certain emplacement, s'il rencontre un code qui nécessite un rappel, il attendra ici et attendra que le résultat du rappel revienne avant de poursuivre l'exécution.

Rappel asynchrone

Lorsque le code est exécuté sur le code qui nécessite un rappel, il ne s'arrêtera pas, mais continuera à s'exécuter. Bien sûr, le résultat du. le rappel peut être modifié après un certain temps.

Code spécifique :

Le code global est encore très simple. Il simule une imprimante et une personne. L'imprimante a pour fonction d'imprimer, mais l'impression prend du temps. Les commentaires ne peuvent pas être donnés lors de la réception de la tâche et vous devez attendre un certain temps avant de pouvoir donner des commentaires. Tout ce que cette personne veut faire, c'est imprimer un CV et connaître les résultats de l'impression. Le code ici implémente les deux méthodes.

Callback.java

public interface Callback {
  void printFinished(String msg);
}

Printer.java

public class Printer {
  public void print(Callback callback, String text) {
    System.out.println("正在打印 . . . ");
    try {
      Thread.currentThread();
      Thread.sleep(3000);// 毫秒
    } catch (Exception e) {
    }
    callback.printFinished("打印完成");
  }
}

People.java

public class People {

  Printer printer = new Printer();

  /*
   * 同步回调
   */
  public void goToPrintSyn(Callback callback, String text) {
    printer.print(callback, text);
  }

  /*
   * 异步回调
   */
  public void goToPrintASyn(Callback callback, String text) {
    new Thread(new Runnable() {
      public void run() {
        printer.print(callback, text);
      }
    }).start();
  }
}

Main.java

public class Main {//测试类,同步回调
  public static void main(String[] args) {
    People people = new People();
    Callback callback = new Callback() {
      @Override
      public void printFinished(String msg) {
        System.out.println("打印机告诉我的消息是 ---> " + msg);
      }
    };
    System.out.println("需要打印的内容是 ---> " + "打印一份简历");
    people.goToPrintSyn(callback, "打印一份简历");
    System.out.println("我在等待 打印机 给我反馈");
  }
}

Main.java

public class Main {//异步回调
  public static void main(String[] args) {
    People people = new People();
    Callback callback = new Callback() {
      @Override
      public void printFinished(String msg) {
        System.out.println("打印机告诉我的消息是 ---> " + msg);
      }
    };
    System.out.println("需要打印的内容是 ---> " + "打印一份简历");
    people.goToPrintASyn(callback, "打印一份简历");
    System.out.println("我在等待 打印机 给我反馈");
  }
}

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn