我一直在try 找到用于定义请求超时的Tomcat属性.具体地说,我正在寻找一种方法来限制请求从服务器端花费的时间.

在做了一些研究后,它似乎是it is not possible

没有办法保证[超时]为you cannot force the thread that is handling the request to stop.

这种感觉是设计出来的,这让我想知道为什么.

反对拥有这样一处房产的原因是什么?或者这是架构的技术限制?

PS:我发现Tomcat、HTTPD和apparently wakanda?也是如此,这就是为什么我的问题是关于服务器的.如果我的假设错了,请纠正我.

推荐答案

There's no mechanism to stop a thread in Java

过go 有这样的机制(Thread.stop()),但它不安全,因为它可能会使对象处于不一致的状态.这是因为如果线程可能突然停止,您不能保证在行为之前发生.因为线程可能正好在临界区的中间停止,请参见Why is Thread.stop deprecated?.

Instead politely ask to stop

您可以try 到Thread.interrupt(),但这取决于您的业务逻辑是否达到Thread.isInterrupted().你是?大概不会吧.因此,即使您可以设置一些超时,在许多情况下,它也不会起作用.

大多数网络应用程序实际上都是数据库绑定的.这意味着,他们大部分时间都在做一些请求.如果你真的想限制请求时间,并且你的应用程序也是受数据库限制的,你可以在这个级别上设置一些超时.例如,C3P0提供像unreturnedConnectionTimeoutcheckoutTimeout这样的超时,而像PostgeSQL这样的数据库提供像statement_timeout这样的各种选项.

与网络上的任何其他通信一样-如果您不想因为防火墙或其他原因而有挂起的风险,则需要设置ConnectionTimeout和socketTimeout.像Spring的RestTemplate这样的工具就有这样的选项.当对方没有回应时,这将有助于处理案件.但如果对方的react 非常缓慢,逐渐地,这是没有帮助的.

Java相关问答推荐

Java同步小服务器

Java加密/解密代码转换为PHP不起作用

我想知道为什么我的控制器给出嵌套响应

JLS中形式参数列表后面的任何括号对用于确定方法结果中的精确数组类型的具体含义是什么?

计算战舰沉船/船只的问题(Java)

如何让HikariCP指标在NewRelic中正确显示?

如何从片段请求数据到活动?在主要活动中单击按钮请求数据?

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

需要一个找不到的jakarta.sistence.EntityManager类型的Bean

将java.util.Date转换为OffsetDateTime

S,要对Java复制构造函数深度克隆所有属性进行单元测试,最可靠的方法是什么?

允许同时执行两个方法,但不能同时执行这两个方法

JNI:将代码打包成自包含的二进制文件

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

为什么StandardOpenOption.CREATE不能通过Ubuntu在中小企业上运行?

Spring动态反序列化JSON可以是列表,也可以只是一个对象

FETCH类型设置为LAZY,但它仍会发送第二个请求

使IntelliJ在导入时优先 Select 一个类或将另一个标记为错误

Win32函数的JNA绑定DwmGetColorizationColor返回E_INVALIDARG错误

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API