gpt4 book ai didi

java - 强制终止卡在某个方法的 API 调用上的线程

转载 作者:行者123 更新时间:2023-11-30 06:38:44 24 4
gpt4 key购买 nike

我的场景如下:

我正在实现一个服务器,该服务器必须在每个请求的指定超时期限内超时或产生响应。因此,从服务器的角度来看,每个请求都会得到响应(当然,由于传输层故障等原因,响应可能无法到达客户端)。

为了实现上述语义,每个请求都会产生一个线程(实际上是从线程池中检索一个可用的线程)并通过同步对象上的通知等待其响应。等待时间受限于发送到 Object 的等待方法的超时参数。生成的线程将请求委托(delegate)给一个真正知道如何处理请求的对象。此对象的调用 API 是已知的,但没有指定调用永远不会无限期挂起的已知服务级别协议(protocol)。 (特别是在我的例子中,服务器实际上是一个 CORBA 客户端——但这不是重点。)

现在,我感兴趣的是,是否有一种方法可以让我以某种方式检测到该线程没有响应,然后杀死它(中断它),即使我当前在方法调用上被阻塞?

顺便说一句,我知道我可以保留对线程对象的引用,并在预先指定的时间后调用它的 interrupt() 方法。不幸的是,这并不能确保“中断”语义......

Java Thread Primitive Deprecation

谢谢大家

最佳答案

我认为如果您不能依赖 interrupt() 语义,那么您可能就不走运了。没有可靠或安全的方法来强制终止线程。这在任何语言中都是危险的。

我希望 interrupt() 能够为您提供所需的东西,即使它可以被规避。 CORBA 调用应该通过标准网络类,因此应该正确地中断任何阻塞调用。

除了生成完整的子进程之外,这是您可以做的最好的事情。

关于java - 强制终止卡在某个方法的 API 调用上的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com