【发布时间】:2015-09-02 14:19:46
【问题描述】:
我的问题场景是:
在我的 servlet 中,我从某个地方(不相关)获得大量数据。我必须遍历所有这些数据并将其放入一个数组中,将其转换为 JSON 对象并将其发送到客户端进行查看。如果我在单个响应中执行此操作,则显示结果需要很长时间。因此,我需要做多线程。
创建的线程需要不断地将数据添加到列表中,而主线程在收到请求时(对数据的请求会定期发送)发送当前可用的列表。
例如,在第一次请求时,发送的响应是:1 2 3 第二个请求:4 5 6 等等。
现在我来解决实际问题:我不知道如何在 servlet 中进行多线程。我浏览了许多资源和示例,但这只会让我更加困惑。有些示例在 doGet 中创建了线程,我认为这是非常错误的,有些示例在 init() 方法中创建了它们,但我不知道如何传递参数并从线程中获取结果,如果它在 init 方法中声明(它不能是全局变量)。然后是 servletContextListener 的例子,但我没有发现任何有用或有意义的东西。
谁能给我一个可靠的来源,或者给我一些伪代码来解决我的问题。如果答案与上述场景相关,那将非常有帮助。
谢谢
【问题讨论】:
-
请解释一下,一旦向您的servlet发出请求,您应该去请求数据(从servlet到外部数据)?还是 servlet 应该做一些关于获取数据的背景知识并为客户做好准备?
-
为简单起见,数据已经存在。现在后台线程需要开始将该数据放入列表中(它可以在请求到来之前开始这样做)。当请求到来时,doGet 只是简单地以列表的当前状态进行响应。后台线程一直在向列表中添加数据。另一个请求来了,新列表被发送等等。
-
如果它有助于从先前的请求中检索数据。我将该数据存储在 servlet 上下文中。现在,我要创建的线程正在将数据更改为列表
标签: java multithreading servlets