gpt4 book ai didi

java - 可以将 Thread 对象存储在 session 或应用程序属性中吗?

转载 作者:行者123 更新时间:2023-11-29 06:46:24 24 4
gpt4 key购买 nike

我不确定我是否在正确的轨道上,但我之前已经创建了一个线程并将其存储在当前 session 中以便能够在其他 Servlet 中使用它。

当用户登录时,我需要一个线程来定期轮询网络服务服务器并检索更新。当用户注销时,我想停止/暂停线程。

如果我在用户登录时创建线程,如果我想在用户注销时暂停它,然后在用户登录时再次启动它,我需要引用这个线程。

解决此问题的最佳和正确方法是什么?我是否应该从线程内部监视 session ,如果用户已注销,则让线程返回以结束线程?

那下次用户登录的时候,我可以新建一个后台Thread吗?

***我需要线程在后台运行并轮询 Web 服务服务器以获取我用来更新数据库的更新。它可能每 5 分钟轮询一次。

我不希望它一直在轮询,因此我试图根据用户登录与否来控制它......当他们按顺序注销时,我将 boolean 值 running 设置为 false停止线程。因为线程存储在应用程序上下文中,所以我可以在他们重新登录时将 running 设置为 true。

在后台运行并检查某些内容(例如您的互联网是否正常)的线程怎么样?

我知道如何创建线程,但我对如何终止它感到困惑,因为它需要在后台持续运行。

我是否将线程用于错误的事情?我应该使用其他东西吗?

再次感谢,希望这是一个更好的解释...

最佳答案

由于 servlet 本身会同时被实例化多次,因此创建更多的线程并不是一个明智的主意。如果有一天您因为序列化问题而决定将您的应用程序集群到多台机器上,您将会遇到问题,因此您在一开始就锁定了自己。

此外,您的问题似乎可以从客户端使用 AJAX 池来解决。如果您无法在客户端刷新整个页面的情况下将它们显示给您的客户,为什么要汇集 Web 服务服务器并检索更新?

想想这个场景:如果一个用户 session 持续了 30 分钟,并且用户没有注销,只是关闭了浏览器窗口:您不会知道发生了这种情况,并且您将在接下来的 30 分钟内进行池化该 web 服务,这是一种资源浪费。

关于java - 可以将 Thread 对象存储在 session 或应用程序属性中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4363489/

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