美文网首页
Callable接口

Callable接口

作者: 呢看了看 | 来源:发表于2020-09-17 13:57 被阅读0次

        有两种创建线程的方法-一种是通过创建Thread类,另一种是通过使用Runnable创建线程。但是,Runnable缺少的一项功能是,当线程终止时(即run()完成时),我们无法使线程返回结果。为了支持此功能,Java中提供了Callable接口。

    假设我们现在要实现这样一个功能:浏览器要实时展示服务端计算出来的数据。一种可能的实现是:浏览器频繁(例如定时1秒)向服务端发起请求以获得服务端数据。但定时请求并不能“实时”反应服务端的数据变化情况。 若定时周期为S,则数据延迟周期最大即为S。若想缩短数据延迟周期,则应使S尽量小,而S越小,浏览器向服务端发起请求的频率越高,又造成网络握手次数越多,影响了效率。因此,此场景应使用服务端实时推送技术。

          这里说是推送,其实还是基于请求-响应机制,只不过发起的请求会在服务端挂起,直到请求超时或服务端有数据推送时才会做出响应,响应的时机完全由服务端控制。所以,整体效果看起来就像是服务端真的在“实时推送”一样。

          可以利用SpringMVC的DeferredResult来实现异步长连接的服务端实时推送。

    使用DeferredResult的流程:

    浏览器发起异步请求

    请求到达服务端被挂起

    向浏览器进行响应,分为两种情况:3.1 调用DeferredResult.setResult(),请求被唤醒,返回结果3.2 超时,返回一个你设定的结果

    浏览得到响应,再次重复1,处理此次响应结果

    相关文章

      网友评论

          本文标题:Callable接口

          本文链接:https://www.haomeiwen.com/subject/ndecektx.html