当前位置: 首页 > 面试题库 >

使用Runnable在Java中实现回调

裴嘉许
2023-03-14
问题内容

我习惯于使用类似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 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
    }
}

和一切简单的教程,您需要了解线程 这里



 类似资料:
  • 我正在使用Spring Boot创建套接字服务器,并且在实现Runnable的类中初始化我的JpaRepository时遇到了麻烦。为了测试服务器,我使用netcat,服务器成功接收数据并创建新的线程来处理/解析数据。但是当通过JpaRepository将数据保存在数据库中时,我会得到NullPointerExcure,因为仓库尚未成功初始化。我在配置中错过了什么? 我的SpringBoot应用程

  • 本文向大家介绍Java多线程实现Runnable方式,包括了Java多线程实现Runnable方式的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下 (一)步骤  1.定义实现Runnable接口  2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。 3.通过Thread类建立线程对象

  • 问题内容: 我需要使用“接口”在Java中实现回调函数。我已经将应用程序部分写为 m_GetSizeInterface是一个包含回调函数GetSize的接口。此GetSize方法在应用程序中被覆盖。在JNI中,我需要调用具有原型的CPP函数 如何将此GetSize作为参数传递给JNI中的MyCPPFunction?请帮忙 问题答案: 这里的复杂之处在于您要调用本机C ++代码,而您又要调用Java

  • 本文向大家介绍Java中继承thread类与实现Runnable接口的比较,包括了Java中继承thread类与实现Runnable接口的比较的使用技巧和注意事项,需要的朋友参考一下 Java中线程的创建有两种方式:  1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类     在实际应用中,我们经

  • 问题内容: 根据java doc,方法无法返回值。但是,我确实想知道是否有任何解决方法。 其实我有一个方法,它调用: wheren方法是: 我想访问变量是否可行? 问题答案: 使用而不是使用界面。 例: 在此示例中,您还将需要实现WordLengthCallable类,该类实现Callable接口。

  • 我尝试在具有Runnable的类中使用通过实例化的对象实例,但我得到了 我经历了这一过程,但我尝试的所有解决方案仍然是相同的问题。 共享我的代码: 我把这个类称为其他类的可运行类 < code>executor.submit(新的MyClass("abc "," def ")。newRunnable()); 那么,我是不是做错了什么,或者有什么方法可以让我使用这个对象