java 异步接口设计_设计模式以处理Java中的异步响应

小编典典

异步代码始终可以使同步。最简单/最简单的方法是进行异步调用,然后进入一个while循环,该循环仅使当前线程休眠,直到返回值为止。

编辑: 将异步回调转换为同步代码的代码-还是粗略的实现:

import java.util.concurrent.*;

public class MakeAsynchronousCodeSynchronous {

public static void main(String[] args) throws Exception {

final Listener listener = new Listener();

Runnable delayedTask = new Runnable() {

@Override

public void run() {

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

throw new IllegalStateException("Shouldn't be interrupted", e);

}

listener.onResult(123);

}

};

System.out.println(System.currentTimeMillis() + ": Starting task");

Executors.newSingleThreadExecutor().submit(delayedTask);

System.out.println(System.currentTimeMillis() + ": Waiting for task to finish");

while (!listener.isDone()) {

Thread.sleep(100);

}

System.out.println(System.currentTimeMillis() + ": Task finished; result=" + listener.getResult());

}

private static class Listener {

private Integer result;

private boolean done;

public void onResult(Integer result) {

this.result = result;

this.done = true;

}

public boolean isDone() {

return done;

}

public Integer getResult() {

return result;

}

}

}

您也可以按照hakon的答案建议使用CountDownLatch。它将做基本上相同的事情。我还建议您熟悉java.util.concurrent包,以获取更好的线程管理方法。最后,仅仅因为您 可以

做到这一点就不是一个好主意。如果您正在使用基于异步回调的框架,那么与学习如何有效使用框架相比,尝试颠覆它可能要好得多。

2020-12-03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值