当前位置: 首页 > 知识库问答 >
问题:

RESTEasy+异步+回调方法+Java

余靖
2023-03-14
@GET
@Path("/async")
public String checkAsync(@Suspended final AsyncResponse response) {
    response.setTimeoutHandler(new TimeoutHandler() {

        @Override
        public void handleTimeout(AsyncResponse asyncResponse) {
            response.resume(Response.status(Response.Status.SERVICE_UNAVAILABLE)
                    .entity("Operation time out.").build());
        }
    });
    response.setTimeout(2, TimeUnit.SECONDS);

    new Thread(new Runnable() {
            @Override
            public void run() {
                String result = veryExpensiveOperation();
                response.resume(result);
            }

            private String veryExpensiveOperation() {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                logger.debug("Task is processed fully");
                return "Successful";
            }
        }).start();

    return "nothing";
}

共有1个答案

史阳晖
2023-03-14

类中的每个方法都有一个返回(或者可能无效)。但有时需要从方法中进行一些回调。这就是解决办法。

public abstract class MyClass {

    public abstract void myCallbackMethod();

    public void myMethod(){

        for (int i = 0; i < 5; i++) {
            // do somthing
            myCallbackMethod();// it will implements in future.
        }

    }
}

从MyClass生成对象时,必须实现myCallbackMethod抽象方法。像这样

public class NewMain {
    
    public static void main(String[] args) {
        
       MyClass myClass=new MyClass() {

           @Override
           public void myCallbackMethod() {
               System.err.println("this is call back");
           }
       };
       myClass.myMethod();
    }
    
}

结果是

我是回电

我是回电

这意味着您可以从类中的void方法获得五次回调。当您不知道myCallBackMethod的正文内容时,这是一个很好的方法

 类似资料:
  • 同步调用异步方法最安全的方法是什么?

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • 问题内容: 如何快速进行异步回调?我正在为我的应用程序编写一个小框架,因为它应该同时在iOS和OS X上运行。因此,我将非特定于设备的主要代码放入该框架中,该框架还处理对我的在线api的请求。很显然,我也希望应用程序的GUI以及ViewController在api请求完成后立即做出反应。在Objective- C中,我通过将包含必须在id变量中调用的函数以及函数本身的视图保存在选择器变量中的视图来

  • 几周前刚开始学Node.js....我不明白为什么“products”数组包含null而不是所需的对象.... 在第13行,当我对对象进行控制台日志记录时,我得到了所需的对象,但我不明白当我在map函数完成它的执行后在第40行对它们进行控制台日志记录时,它们为什么是空的.... 如果数组长度是2(这意味着推入成功),为什么里面存储的对象仍然是空的,而不是我想要存储的对象? 控制台输出 订单模式

  • playframework 2.2(java 7) 我有REST api,在那里接收一些json,用json数据我正在做一些事情,最后我发送电子邮件并返回结果。发送电子邮件有点慢,所以我希望在处理json后在其他线程中调用此电子邮件方法,或者我希望执行异步并返回结果,而不必等待电子邮件方法的执行。 如何在控制器中实现和调用异步方法? 下面是代码示例 编辑: 不确定它是否好,但有效。