我正面临着以下问题。我有一个servlet,它通过视频剪辑为客户端请求提供服务。但这个视频剪辑是另一个线程(代码转换器)的产物。如果由于代码转换线程尚未完成其工作而导致剪辑未准备好下载,则客户端请求将失败!对如何处理这个案例有什么建议吗?如何停止servlet的响应,直到线程准备好代码转换的片段?
提前感谢!安东尼斯
发布于 2010-09-15 20:30:42
这里要做的最简单的事情就是使用Future。向转码器提交请求,让转码器立即返回Future。然后,HTTP线程可以在将来调用get时阻塞,直到视频准备好为止。
加入对我来说不是一个好的选择。Thread#join会一直阻塞,直到目标线程终止,但线程是否在完成作业后终止是实现细节。例如,如果代码转换器将使用缓存的线程池,则应用程序。休息一下。
发布于 2010-09-15 20:24:03
您可以使用常规方法(睡眠、等待、加入、Future#get)延迟servlet的执行。
在你的例子中,听起来你想加入转码视频的Thread (或get the Future)。
然而,只有当你需要阻塞的时间只有几秒钟时,你才应该这样做。否则,客户端浏览器可能会使请求超时,或者用户体验很差。如果代码转换工作需要更长的时间,可以考虑输出进度条之类的内容,它会不断轮询服务器,直到任务完成,然后才会尝试加载视频剪辑。
https://stackoverflow.com/questions/3717488
复制相似问题