java标准库中异步方法的示例探索

oewdyzsn  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(295)

我想在java标准库中找到一个方法的示例,该方法将回调作为参数,立即返回,并在完成任务后调用回调。例如,您可以想象一个从键盘获取用户输入的方法,该方法立即返回,但一旦输入就调用回调。
下一个最好的方法是在监听器完成任务后调用监听器。android sdk的一个例子是 SoundPool.load() 以及 SoundPool.setOnLoadCompleteListener() .
我不考虑像这样的摇摆方法 addActionListener() 举例来说,因为该方法的目的是添加侦听器。触发事件是完全独立的。
我的动机是准备一个关于JavaI/o的讲座,并希望对比(1)阻塞,(2)立即返回(有或没有数据),或(3)使用回调的方法。

w6mmgewl

w6mmgewl1#

您正在寻找的一组示例是javanioaynchronouschannel实现。例如:
异步文件通道#锁(a,completionhandler)
异步文件通道#读取(bytebuffer、long、a、completionhandler)
异步文件通道#写入(bytebuffer、long、a、completionhandler)
异步socketchannel#connect(socketaddress,a,completionhandler)
asynchronousserversocketchannel#accept(a,completionhandler)
如您所见,所有这些方法(以及其他未列出的方法)都使用提供的completionhandler来通知调用方操作完成,无论操作成功还是失败。这些方法中的大多数(如果不是全部的话)都有一个重载,它不接受 CompletionHandler 而是返回一个 Future .
还有java.util.concurrent.completionstage,它有许多方法,在阶段完成后调用一些函数接口实现。

bjp0bcyl

bjp0bcyl2#

java标准库通常使用 Future 抽象而不是回调作为核心构建块。如果您想构建一个“基于回调”的结构,那么可以使用 then* 上的方法 CompletionStage (通常 CompletableFuture ).
这种结构允许调用者灵活地处理异步结果;例如,我使用它对多个下游api调用进行分散聚集,这些调用用于构建复合结果。

相关问题