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
Multithreading 防止Tomcat中的线程阻塞_Multithreading_Web Services_Tomcat_Thread Safety - Fatal编程技术网

Multithreading 防止Tomcat中的线程阻塞

Multithreading 防止Tomcat中的线程阻塞,multithreading,web-services,tomcat,thread-safety,Multithreading,Web Services,Tomcat,Thread Safety,我有一个Javaservlet,它充当部署在同一Tomcat实例上的其他Web服务的门面。我的包装器servlet创建更多线程,每个线程调用一个Web服务,整理响应并将其发送回客户端。这些Web服务作为不同的应用程序部署在同一个Tomcat实例上 在部署了几个小时之后,我看到这个facade包装器服务上出现了线程阻塞,这导致Tomcat实例崩溃。所有被阻止的线程都是此facade Web服务的端点(如http://domain/appContext/facadeService) 由于实际执行处理

我有一个Javaservlet,它充当部署在同一Tomcat实例上的其他Web服务的门面。我的包装器servlet创建更多线程,每个线程调用一个Web服务,整理响应并将其发送回客户端。这些Web服务作为不同的应用程序部署在同一个Tomcat实例上

在部署了几个小时之后,我看到这个facade包装器服务上出现了线程阻塞,这导致Tomcat实例崩溃。所有被阻止的线程都是此facade Web服务的端点(如http://domain/appContext/facadeService


由于实际执行处理的可用线程不足,有没有办法控制这种线程阻塞?防止此类死锁的最佳做法是什么?

解决此问题的常见方法是使用框架。您需要将web服务调用表示为
Callable
,并将其传递给执行者,或者作为
集合进行传递(有关完整的选项列表,请参阅Javadoc)


你有两种选择来控制时间。首先是使用
Executor
类的适当方法的参数,在该类中指定最大web服务超时。另一个选项是获取结果(表示为
Future
),并使用
.get(long,TimeUnit)
指定等待结果的最长时间。

您需要提高回答率。我可以帮助你,但我只是不想,因为你不愿意接受给定的答案。对于我提出的大多数问题,我还没有找到一个明确的答案,因此,它们仍然是开放的。Web服务之间是否存在任何依赖关系?i、 例如,webservice1可以调用webservice2吗?子服务是互斥的。但是使用超时仍然不能解决底层死锁的原因?线程被阻塞的原因没有限制,特别是在没有提供上下文的情况下。例如,如果使用非线程安全的类,很容易出现死锁(请参见问题1068190)。但是一般的建议是使用Executor/Future,因为您至少可以回收那些等待了很长时间的线程。我们已经在使用Executor框架,尽管线程没有超时。