sap*_*Pro 5 java multithreading servlets web
当请求到达处理文件上传的servlet时,最好在该servlet中启动一个新线程,该线程new Thread(r).start()将处理上传文件附带的另一个数据.我希望这能同时处理这两个工作.
Tom*_*icz 18
这不仅是一个坏主意,但它也行不通.原因如下:您的文件上传请求最终将命中doPost()方法.只要您使用此方法,容器就会保持连接打开状态.从该方法返回后(如果您决定在单独的线程中处理传入数据,doPost()将提前完成),容器会假定您已完成请求并将关闭连接.从客户端的角度来看,服务器中断了上传.并且由于线程的异步性质,中断将在随机时刻发生.
相信我,一些用户已经经历过:HttpServletResponse似乎会过早定期发送.
此外,每个请求启动新线程是一个坏主意,因为这样做的扩展性很差(某些规范甚至禁止它).你可以做的是使用Servlet 3.0异步请求并异步处理上传,但最好是使用一些线程池.另请参阅:为什么使用startAsync创建新线程而不是在servlet线程中工作?.