我面临以下问题。我有一个servlet,通过视频剪辑提供客户端请求。但是这个视频剪辑是另一个线程(代码转换器)的产物。如果由于代码转换器线程尚未完成其作业而未准备好下载剪辑,则客户端请求将失败! 有关如何处理此案的任何建议?我怎样才能暂停servlet的响应,直到线程准备好转码后的剪辑?
提前致谢! 安东尼
答案 0 :(得分:2)
您可以使用常规方法延迟执行servlet(sleep,wait,join,Future#get)。
在您的情况下,听起来您想要加入转码视频的线程(或获取未来)。
但是,如果你需要阻止的时间只有几秒钟,那么你真的应该这样做。否则,客户端浏览器可能会超时请求,或者用户体验很糟糕。如果代码转换工作需要更长时间,请考虑输出类似进度条的内容,这样可以在任务完成之前轮询服务器,然后再尝试加载视频剪辑。
答案 1 :(得分:2)
这里最直接的做法是使用Future。向转码器提交请求,并立即返回Future
。然后,HTTP线程可以阻止此未来的呼叫get
,直到视频准备就绪。
加入对我来说听起来不是一个好选择。 Thread#join块直到目标线程终止,但是在执行作业后线程是否终止是实现细节。例如,如果代码转换器将使用缓存的线程池,那么应用程序。休息。