Java – Servlet中的线程和并发
我有一个Web应用程序从数据库中检索(大)结果列表,然后需要通过查看每个结果削减列表,并抛出“无效”的结果.使结果“无效”的参数是动态的,我们无法将工作传递给数据库. 因此,一个想法是创建一个线程池和ExecutorService并同时检查这些结果.但我一直看到人们说“哦,规范禁止在servlet中产生线程”或“这只是一个坏主意”. 所以,我的问题是:我该怎么办?我在一个servlet 2.5容器中,所以作为3.0规范的一部分的所有异步的好东西都无法使用.编写一个我通过JMS与之通信的单独服务似乎有点矫枉过正. 在这里寻找专家意见. 贾森 最佳答案
废话.
JEE规范有很多“不应该”和“你不要”.另一方面,Servlet规范没有. Servlet规范更加狂野.它实际上并没有像JEE规范那样深入到实际操作方面. 我还没有看到一个JEE容器(一个纯粹的servlet容器,一个Tomcat / Jetty,或者全船ala Glassfish / JBoss)实际上阻止了我自己开出一个线程. WebSphere可能,它应该是相当臭名昭着的,但我没有使用过WebSphere. 如果创建不守规矩,自我管理的线程的概念让你发痒,那么完整的JEE容器内部有一个正式的“WorkManager”,可以用来剥离线程.他们只是以不同的方式揭露它们.这是获取线程的“通过书籍 – 机制”的更多机制. 但是,坦率地说,我不会打扰.使用标准类库中的Executors可能会获得更多成功.如果你的系统太多线程使你的系统饱和,一切都失控了,好吧,那就在你身上.不要那样做(tm). 至于异步解决方案是否合适,我会对此进行讨论.从你的帖子中不清楚它是否存在.但你的问题是线程和Servlet. 去做就对了.请注意它“可能不便携”,做得对(使用执行程序),对此负责,容器不会更明智,也不关心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |