Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在servlet中启动新线程_Java_Multithreading_Servlets_Web - Fatal编程技术网

Java 在servlet中启动新线程

Java 在servlet中启动新线程,java,multithreading,servlets,web,Java,Multithreading,Servlets,Web,当请求到达处理文件上载的servlet时,是否可以使用new thread(r).start()在该servlet中启动一个新线程,该线程将处理上载文件附带的另一段数据。我想这样做是为了并行处理这两个任务。在Servlet中启动新线程没有什么错(与EJB不同),所以是的,它是可以的 编辑:第二个想法@Tomasz Nurkiewicz是对的。文件上载将被停止。webserver将在新线程中隐式运行servlet,因此每当任何请求命中servlet时,它都将在不同的线程中执行。我不认为有什么理由自

当请求到达处理文件上载的servlet时,是否可以使用
new thread(r).start()
在该servlet中启动一个新线程,该线程将处理上载文件附带的另一段数据。我想这样做是为了并行处理这两个任务。

在Servlet中启动新线程没有什么错(与EJB不同),所以是的,它是可以的


编辑:第二个想法@Tomasz Nurkiewicz是对的。文件上载将被停止。

webserver将在新线程中隐式运行servlet,因此每当任何请求命中servlet时,它都将在不同的线程中执行。我不认为有什么理由自己创建一个新的线程。这不仅是个坏主意,而且也行不通。原因如下:您的文件上传请求最终将命中
doPost()
方法。只要使用此方法,容器就会保持连接打开。从该方法返回后(如果您决定在单独的线程中处理传入数据,
doPost()
将提前完成),容器将假定您已完成请求,并将关闭连接。从客户端的角度来看,上载被服务器中断。由于线程的异步性质,中断将在随机时刻发生

相信我,一些用户已经体验到了:


此外,每个请求启动一个新线程是一个坏主意,因为它的伸缩性很差(甚至被一些规范禁止)。您所能做的是使用Servlet3.0异步请求并异步处理上传,但最好使用一些线程池。另请参见:。

我不鼓励使用它,除非您使用线程池。另外,Servlet 3现在有异步服务调用,为什么不研究一下呢?您使用的是哪个应用服务器?它是否为长时间运行的任务提供了某种支持?@BigMike Glassfish 3.1.1不正确,在并发环境中编写线程需要管理。只要线程不使用任何非局部变量(servlet中的字段),就没有问题。我假设doGet/doPost方法中发生的一切可能只是为了不冻结客户端(如果线程很耗时?),所以用户不必等待servlet完成upload@BigMike但是通常,我们不给servlet多重责任,如果这个servlet正在处理文件上传,那么您对此无能为力,因此,与其创建新线程,不如说从客户端发起一个全新的请求。。。。坏主意,除非您需要执行一些长时间运行的CPU密集型任务。@Tomasz Nurkiewicz即使我将新线程的工作保留在该servlet的
doPost()
方法中?@Tomasz Nurkiewicz从该线程的run方法向另一个servlet发送新请求是否可以,在这个servlet的post方法内部?你已经引起了我的好奇心:)我将尝试一些异步的东西,但是我对客户端有一些不好的感觉。(如何返回上传结果?。@grassPro:如果你的线程在
doPost()
(你正在使用
join()
?)等待线程结果)线程的意义是什么?