聂永的博客

记录工作/学习的点点滴滴。

Servlet 3.0笔记之Servlet的异步特性支持失效怎么办?

满心欢喜的为Servlet 添加上异步支持注解(asyncSupported = true),不曾想,其异步特性完全不起作用,仔细检测项目,发现存在一个编码拦截器(Filter),虽使用注解,但未标明支持异步,导致被拦截的标注为异步支持的Servlet,异步特性皆失效。怎么办,在Filter中注解里面添加asyncSupported = true。问题解决。
但转念一想,因历史原因,遗留系统会存在很多的Servlet 2.*规范的Filter,无法支持异步,怎么办?全部手动修改为注解版本,可能不太现实。还好,Doug Lea的JUC并发包,为我们提供了一种实现思路。
实际步骤:
  1. 准备一个线程池
  2. 把当前请求相关属性包装进一个任务线程中
  3. 获取当前任务线程执行结果(不一定会有返回值)
  4. 阻塞,执行完毕或超时,或被中断异常,可以输出客户端
  5. 整个请求结束
实际上,提交到一个线程池的任务线程,默认会返回一个Future对象,利用Future对象的get方法阻塞的特性,当前请求需要等待任务线程执行的结束,若指定时间内任务线程顺利完成,则不必等到设定的时间的边界即可自然往下执行。
实际代码:

需要备注说明的是,若Future.get()无参数,则意味着需要等待计算完成,然后获取其结果。这样可不用设定等待时间了。更多信息,请参考JDK。
测试代码下载

posted on 2012-01-18 10:32 nieyong 阅读(668) 评论(0)  编辑  收藏 所属分类: Servlet3Java


只有注册用户登录后才能发表评论。


网站导航:
 

公告

所有文章皆为原创,若转载请标明出处,谢谢~

新浪微博,欢迎关注:

导航

<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿(58)

随笔分类(130)

随笔档案(151)

个人收藏

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜