java - 使用 Runnable 在 Java 中实现回调

标签 java asynchronous

我习惯于用类似 JavaScript 或类似 Erlang 的语言编写代码,在这些语言中我可以轻松地制作回调函数。现在我必须用 Java 写一些东西。我想出了如何像这样执行回调:

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();
    }
}

问题是:这是正确的方法吗?

最佳答案

像这样简单地将接口(interface)(回调实现)传递给您的可运行对象

interface Callback {
    void callback(); // would be in any signature
}

class MyThread implements Runnable {

    Callback c; 

    public MyThread(Callback c) {
        this.c = c;
    }

    public void run() {
        // some work
        this.c.callback(); // callback
    }
}

还有一个关于线程 here 所需的一切的简单教程

关于java - 使用 Runnable 在 Java 中实现回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255498/

相关文章:

javascript - 如何将控制参数传递给 alfresco 5 中的选择器?

.net - 向 Windows GUI 线程发送消息

java - 隐式反馈情况下的 Mahout 推荐

java - OSGi 框架内部(内部实现)是什么/如何?

javascript - 异步实习生测试的异步 xhr 处理程序内的断言(假)不会使测试失败

Java AsyncHttpClient : broken file while writing from LazyResponseBodyPart to AsynchronousFileChannel

qt - 对一串 QML 使用 Loader

安卓小部件 : Service vs Async Task

java - 如何在 JPA/Hibernate 应用程序中配置连接池(没有 Spring)?

java - Gitkit Java - 更新照片 URL