Implémentation de callbacks en Java avec Runnable
J'ai l'habitude d'écrire du code en JavaScript ou en Erlang-comme les langues, où je peux faire les fonctions de rappel de manière simple. Maintenant je dois écrire quelque chose en Java. J'ai compris comment effectuer rappel comme ceci:
import java.util.*;
class Demo extends Thread{
private int data;
public void run(){
ask_for_data(new Runnable(){
public void run(){
on_data();
}
});
}
public void on_data(){
System.out.println("Async callback: " + data);
}
public void ask_for_data(final Runnable callback){
System.out.println("2");
Runnable r = new Runnable(){
public void run(){
data = get_data();
new Thread(callback).start();
}
};
new Thread(r).start();
}
public int get_data(){
try{
Thread.sleep(1000);
} catch (Exception e) {};
return 42;
}
public static void main(String[] args) {
Demo d = new Demo();
d.start();
}
}
Question est: est-il correct?
source d'informationauteur zie1ony
Vous devez vous connecter pour publier un commentaire.
tout simplement passer à une interface (rappel de mise en œuvre) à votre exécutable, comme ce
et un tutoriel simple sur tout ce dont vous avez besoin au sujet de thread ici
Votre code est très compliqué - vous étendre
Thread
de mettre en œuvreRunnable
en interne et au sein de laRunnable
créer un autreThread
. C'est pas la bonne approche.Interface
Runnable
peut être considéré comme une commande de modèle de conception - c'est une unité de travail à faire et il a été conçu pour séparé logique de "ce qu'il faut faire" de l'enfilage des mécanismes.Je ne sais pas si je reçois votre problème correctement, mais ce que je comprends, vous essayez juste de passer des paramètres à la fonction de rappel en cours d'exécution dans le thread séparé. Alors, pourquoi ne pas simplement présenter en classe à la mise en œuvre de
Runnable
(c'est votre unité de travail à faire) et passe par le constructeur de certains paramètres de travail. Ce que je veux dire, c'est quelque chose comme ci-dessous:et plus tard: