我正在开发学生响应系统。在我的应用程序中,多个学生(超过 500 名)同时参加测验并通过 servlet 提交他们的回答。
参加测验:
全局对象包含测验详细信息(问题、选项),所有学生向 servlet 发送请求以收集测验数据。
提交回复:
学生当前通过servlet提交响应,它将收集响应(Json)并存储在数据库中。
在上述场景中我没有使用多线程。这里有必要使用多线程吗?
如果我将代码转换为多线程,会使程序更有效吗?
如果我使用 RESTful API 来收集数据并将该数据存储在类而不是 Servlet 中怎么办? (如果所有学生都通过REST技术提交响应,而不是使用servlet。REST API技术本身会像servlet一样处理多线程吗?)
最佳答案
如果您使用 servlet,则该 servlet 在 servlet 容器(例如 Tomcat)中执行。 Tomcat 为您管理线程,对于每个 HTTP 请求,Tomcat 从其池中获取一个线程并在该线程上运行请求。所以您的 servlet 已经在使用多线程了。
您可能可以采取一些措施来改进该程序。如果您不使用连接池,那么使用连接池将会是一个很大的改进。如果没有连接池,所有线程都必须轮流访问同一个连接,而使用连接池可以同时完成更多工作。 (此外,使用连接池使应用程序更能容忍网络中断和数据库可用性问题。)
还要确保您的 servlet 没有保留任何状态并且没有同步方法。如果有需要保留的用户信息,请将其保留在 HTTP session 中。
这些步骤是为了最大限度地减少线程因等待另一个线程持有锁而被阻塞的情况,以便您的多个线程可以完成更多工作并减少等待。
请记住,REST 是一种架构风格,而不是框架。您没有说明您打算使用哪种特定框架,但在我看来,框架的设计者似乎不太可能做出破坏使用该框架的应用程序并发性的决策。由于不池化连接和使用过多的同步,您的并发性很可能会受到限制。
关于java - 这里需要多线程: More students submitting their response to store in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326228/