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