2010-09-15 72 views
0

我正面临以下问题。我有一个servlet用视频剪辑提供客户端请求。但这个视频剪辑是另一个线程(代码转换器)的产品。如果由于代码转换器线程尚未完成其作业而导致剪辑未准备好下载,则客户端请求将失败! 有关如何处理此案件的任何建议?在线程准备好转码后的剪辑之前,如何停止servlet的响应?暂停Servlet响应

在此先感谢! Antonis

+0

http://kb2.adobe.com/cps/173/tn_17328.html – 2010-09-15 12:21:10

+0

真正有用的,感谢 – Antonis 2010-09-15 13:11:18

回答

2

这里最直接的做法是使用Future。向代码转换器提交请求,并立即返回Future。然后,HTTP线程可以阻止此未来呼叫get,直到视频准备就绪。

加入对我来说听起来不太合适。线程#加入块直到目标线程终止,但线程在做完工作后终止是实现细节。例如,如果代码转换器将使用缓存线程池,则应用程序。休息。

+0

伟大的答案从你们俩。我会试着去看哪一个符合我的需求。谢谢你们两位 – Antonis 2010-09-15 12:35:27

+0

再说一次,如果阻塞几秒钟,也只能这样做。对于较长的任务,您不能只将servlet和用户的浏览器挂在那里。 – Thilo 2010-09-15 12:37:46

2

您可以用常规方式(sleep,wait,join,Future#get)延迟servlet的执行。

就你而言,这听起来像你想加入线程(或获得未来),转码视频。

但是,如果您需要阻止的时间只有几秒钟,您应该只会这样做。否则,客户端浏览器可能会超时请求,或者用户体验不好。如果代码转换工作需要更长时间,请考虑输出类似进度条的东西,它会继续轮询服务器,直到任务完成,然后尝试加载视频剪辑。