gpt4 book ai didi

java - 我们如何从 servlet 启动线程?

转载 作者:行者123 更新时间:2023-11-30 11:21:32 25 4
gpt4 key购买 nike

从 servlet 启动线程的推荐方法是什么?

示例:一位用户向游戏室发布了一条新的聊天消息。我想向连接到该房间的所有其他玩家发送推送通知,但它不必同步发生。像这样的东西:

public MyChatServlet extends HttpServlet {

protected void doPost(HttpServletRequest request,
HttpServletResponse response)
{
// Update the database with the new chat message.
final String msg = ...;
putMsgInDatabaseForGameroom(msg);

// Now spawn a thread which will deal with communicating
// with apple's apns service, this can be done async.
new Thread() {
public void run() {
talkToApple(msg);
someOtherUnimportantStuff(msg);
}
}.start();

// We can send a reply back to the caller now.
// ...
}
}

我正在使用 Jetty,但我不知道在这种情况下 Web 容器是否真的很重要。

谢谢

最佳答案

What's the recommended way of starting a thread from a servlet?

在servlet 中编写线程程序时应该非常小心。因为它可能会导致错误(如内存泄漏或缺少同步),从​​而导致很难重现的错误,或关闭整个服务器。

您可以使用 start() 方法启动线程。

据我所知,我会推荐 startAsync (servlet 3.0)。我为您找到了一些有用的链接 Click .

but I don't know if the web container really matters in this case.

是的,这很重要。大多数网络服务器(Java 和其他方式,包括 JBoss)遵循“每个请求一个线程”的模型,即每个 HTTP 请求完全由一个线程处理。这个线程通常会花费大部分时间等待数据库请求之类的事情。 Web 容器将根据需要创建新线程。

希望对你有所帮助。

关于java - 我们如何从 servlet 启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com