当前位置: 首页 > 面试题库 >

在servlet中启动新线程

柴瀚昂
2023-03-14
问题内容

当请求到达处理文件上传的servlet时,在该servlet中启动一个新线程是一个好主意,该线程new Thread(r).start()将处理与上传的文件一起提供的另一段数据。我想以此同时处理这两项工作。


问题答案:

这不仅是一个坏主意,而且也行不通。原因如下:您的文件上传请求最终将命中doPost()方法。只要您使用此方法,容器就会保持连接打开。从该方法返回后(如果您决定在一个单独的线程中处理传入数据,doPost()则将提早完成),容器将假定您已完成请求并关闭连接。从客户端的角度来看,服务器中断了上传。并且由于线程的异步特性,中断将在随机时刻发生。

相信我,一些用户已经体验到:HttpServletResponse似乎定期过早发送。

此外,每个请求都启动新线程是一个坏主意,因为扩展性很差(甚至某些规范禁止这样做)。您 可以 做的是使用Servlet
3.0异步请求并异步处理上载,但最好使用一些线程池



 类似资料:
  • 问题内容: 我很难找到一种方法来启动,停止和重新启动Java中的线程。 具体来说,我在中有一个类Task(当前实现)。我的主应用程序需要能够在线程上启动此任务,在需要时停止(杀死)该线程,有时还可以杀死并重新启动该线程… 我的第一次尝试是与,但我似乎找不到办法重新启动任务。当我使用任何将来的呼叫失败时,因为是“关机” … 那么,我该怎么做呢? 问题答案: 一旦线程停止,你将无法重新启动它。但是,没

  • 问题内容: 我试图编写一个文件监视器,它将检查文件是否添加了新行,该监视器实际上是一个线程,它将始终由randomaccessfile读取该行。 这是监视器的核心代码: 这是一些帮助类: 这是调用监视器的示例: 现在,我的问题是,如果我仅调用以下代码,代码就可以很好地工作: 这将监视文件的行追加,并通知侦听器。 但是,当我致电: 这意味着我想监视另一个文件而不是之前。 因此,在Monitor中,我

  • 在WPF应用程序中,我有一个线程池(每个线程都是对返回base 64映像的REST webservice的调用),我想精确地“控制”这些线程。 这些线程是异步的,我希望能够暂停/恢复它们中的每一个。 > < li> 我想使用CancellationToken之类的东西不是一个选项,因为每个线程都只是进行一次调用并等待响应。 我只是在课堂线程中看到的= 如果有人有什么建议呢? 提前谢谢。

  • 问题内容: 我有一个运行以下配置的网站: Django + mod-wsgi + Apache 在一个用户的请求中,我向另一个服务发送另一个HTTP请求,并通过python的httplib库解决了这个问题。 但是有时此服务不会得到太长的答案,并且httplib的超时不起作用。因此,我创建了线程,在该线程中,我向服务发送请求,并在20秒(20秒-是请求超时)后加入。它是这样工作的: 像这样的东西 并

  • 我用Inno Setup做了一个安装程序,在一些文件运行后我需要重启电脑,所以我用了这篇文章中的解决方案。 inno安装示例“CodePrepareToInstall”。iss运行良好,所以我使用了代码进行测试安装,但计算机重新启动后安装程序无法启动。 两个安装程序(inno demo和我的测试)都在“HKLM\Software\Microsoft\Windows\CurrentVersion\R

  • 我正在尝试使用Apache camel和Quarkus启动我的应用程序,但它给我以下错误: 至少有一个bean与所需的类型和限定符匹配,但被标记为未使用,并在构建期间被删除:类bean org。阿帕奇。骆驼组成部分servlet。CamelHttpTransportServlet[类型=[类javax.servlet.http.HttpServlet,接口java.io.Serializable,