struts2的action怎样实现多线程?

GzLiotu 2014-09-08 10:42:32
struts2的action怎样实现多线程?为的是action中出发另外一个请求或者进程。而本页面直接返回,不需要等待action中数据的加载。本人多线程用得比较少,求具体一些的例子,谢谢大神!!!
...全文
554 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccqqct 2014-12-12
  • 打赏
  • 举报
回复
楼主是想问servelet3中的AsyncContext么?不过好象struts2的ActionContext.getContext()都是绑定线程的,一年多前试过,startAsync后strtus2自己返回了,但页面还是不会返回,直到complete,但struts2就不管这些数据了,而且异步执行的线程里取不到ActionContext,对了,我还是用nio请求第三方数据的,因为第三方返回慢,经常要几秒,甚至十秒都有,如果不用nio+servlet3就导致线程很多,这样只是连接多。当时为解决这些看struts2源码,写插件改好久。不知道现在的strust2有没有解决
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
知道是多线程的,为的是action中发出一个请求,而页面直接返回,不需要等待action中数据的加载。如果等action中所有要查询的数据加载完,那样速度就会很慢,所有想利用多线程,解决这个问题。。。
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
引用 13 楼 zy353003874 的回复:
其实线程池不见得比你的慢慢获取数据快多少
确实,效果不是太明显。
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
恩,意思就是这样
zy_think123 2014-09-09
  • 打赏
  • 举报
回复
其实线程池不见得比你的慢慢获取数据快多少
cxw3152 2014-09-09
  • 打赏
  • 举报
回复
struts1是单例模式。。所以是单线程的。。 struts2不是单例模式每个session单独共享一个线程 所以就是多线程的。
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
确实是异步,不过用Ajax,js过多不利于百度搜索引擎的抓取?
wu244534279 2014-09-09
  • 打赏
  • 举报
回复
按你的说法,你要实现的效果应该是异步,而不是多线程,看看ajax吧
赵牧野 2014-09-09
  • 打赏
  • 举报
回复
引用 11 楼 zhqqhao 的回复:
是用分页做了。页面用ajax无刷新实现数据加载,但是页面多显示js代码或是动态的填充层,这样不利于蜘蛛的抓取。改用了页面跳转的时候在action中加载数据,然后跳转至页面,不过这样速度比较慢,在action中加了一个线程池效果还是不太理想,怎么办???
你是用线程把所有数据都读取出来然后返回?
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
是用分页做了。页面用ajax无刷新实现数据加载,但是页面多显示js代码或是动态的填充层,这样不利于蜘蛛的抓取。改用了页面跳转的时候在action中加载数据,然后跳转至页面,不过这样速度比较慢,在action中加了一个线程池效果还是不太理想,怎么办???
赵牧野 2014-09-09
  • 打赏
  • 举报
回复
引用 9 楼 zhqqhao 的回复:
/* 多线程从多个接口获取查询数据 */ ExecutorService pool = Executors.newFixedThreadPool(1); //创建线程池 Callable<List> rmCallable = new RoadRunCallable(criteria,SqlConstants.GET_TRAVELS_LIST); Future<List> rmfuture = pool.submit(rmCallable); pool.shutdown(); //关闭线程池 public class RoadRunCallable implements Callable<List> { private PageQueryCriteria critria; private String statementName; public RoadRunCallable(PageQueryCriteria critria,String statementName){ this.critria = critria; this.statementName = statementName; } @Override public List call() throws Exception { Query query = (Query)ServiceLocator.getService("query"); return query.queryForList(statementName, critria); } }
为啥不用分页?
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
/* 多线程从多个接口获取查询数据 */ ExecutorService pool = Executors.newFixedThreadPool(1); //创建线程池 Callable<List> rmCallable = new RoadRunCallable(criteria,SqlConstants.GET_TRAVELS_LIST); Future<List> rmfuture = pool.submit(rmCallable); pool.shutdown(); //关闭线程池 public class RoadRunCallable implements Callable<List> { private PageQueryCriteria critria; private String statementName; public RoadRunCallable(PageQueryCriteria critria,String statementName){ this.critria = critria; this.statementName = statementName; } @Override public List call() throws Exception { Query query = (Query)ServiceLocator.getService("query"); return query.queryForList(statementName, critria); } }
赵牧野 2014-09-09
  • 打赏
  • 举报
回复
引用 6 楼 zhqqhao 的回复:
问题解决了,我在action中用到了线程池,解决页面跳转过慢的问题。
绝对是不好的实现,web编程不应该使用那么“底层”的方法,你应该使用ajax。
wangqiao4j 2014-09-09
  • 打赏
  • 举报
回复
引用 6 楼 zhqqhao 的回复:
问题解决了,我在action中用到了线程池,解决页面跳转过慢的问题。
楼主具体是怎么解决的,可以把源码发来看看么,我也想学习下,多谢。
GzLiotu 2014-09-09
  • 打赏
  • 举报
回复
问题解决了,我在action中用到了线程池,解决页面跳转过慢的问题。
火柴棍的坚强 2014-09-08
  • 打赏
  • 举报
回复
struts2的action本来就是多例的。。。。所以是多线程的

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧