栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Tomcat中从Servlet产生线程的推荐方法是什么

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Tomcat中从Servlet产生线程的推荐方法是什么

在像Tomcat或Jetty这样的准系统servlet容器中,最安全的选择是使用最大 线程数 的applicaton宽 线程池
,以便在必要时将任务排队。该

ExecutorService
是在这个非常有帮助。

在应用程序启动或servlet初始化后,使用

Executors
该类创建一个:

executor = Executors.newFixedThreadPool(10); // Max 10 threads.

然后在servlet的服务期间(对于您不感兴趣的情况,您可以忽略结果,或将其存储在会话中以供以后访问):

Future<ReturnType> result = executor.submit(new YourTask(yourData));

YourTask
必须实现
Runnable
或者
Callable
,可以是这个样子,因此
yourData
只是你的数据,例如由请求参数值(一定要记住,你绝对不应该通过Servlet
API的工件,如
HttpServletRequest
HttpServletResponse
沿!):

public class YourTask implements Runnable {    private YourData yourData;    public YourTask(YourData yourData) {        this.yourData = yourData;    }    @Override    public void run() {        // Do your task here based on your data.    }}

最后,在应用程序关闭或servlet销毁期间,您需要显式关闭它,否则线程可能会永远运行并阻止服务器正常关闭。

executor.shutdownNow(); // Returns list of undone tasks, for the case that.

如果您实际上使用的是通常可以使用EJB的普通JEE服务器(例如WildFly,Payara,TomEE等),则可以将

@Asynchronous
注释放在从Servlet调用的EJB方法上。您可以选择让它返回
Future<T>
带有的
AsyncResult<T>
具体值。

@Asynchronouspublic Future<ReturnType> submit() {    // ... Do your job here.    return new AsyncResult<ReturnType>(result);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号