gpt4 book ai didi

如果网络被修改,Java 应用程序将挂起

转载 作者:行者123 更新时间:2023-12-01 16:09:52 24 4
gpt4 key购买 nike

我正在开发一个具有多个 View 的 Eclipse 应用程序。从这些 View 中,我必须通过网络访问一些数据。在以下情况下会引发错误。

第 1 步:启动应用程序,一切正常。
第2步:禁用网络
第3步:启用网络
第 4 步:尝试从其中一个 View 通过线路访问数据。该应用程序显然挂起。
第 5 步:现在,如果您尝试从其他 View 访问数据,一切都会正常。

最初我认为这是由于 JVM 的 DNS 缓存而发生的。所以我做了这样的事情。

System.setProperty( "networkaddress.cache.ttl", "0" );
System.setProperty( "networkaddress.cache.negative.ttl" , "0" );

但是问题依然存在。如有任何帮助,我们将不胜感激。

最佳答案

完全疯狂的猜测:如果您使用 TCP,您的应用程序可能不会注意到其套接字已断开连接。如果它在读取中被阻止,它可能不会注意到,直到它尝试向套接字写入内容。这取决于套接字关闭的“干净”程度——如果套接字没有从另一端收到 RST 数据包,它就不会知道另一端已经消失。

您可以尝试从应用程序中强制执行线程转储。通常,JVM 将在终端上运行时响应 Ctrl-\ 或响应带有每个线程的堆栈跟踪的 kill -QUIT 信号。这可以让您看到有问题的线程被阻塞的位置。

如果您可以发布一些可疑代码,那么尝试进行诊断就会容易得多。或者您能解释一下为什么您认为 DNS 缓存会成为一个问题吗?

关于如果网络被修改,Java 应用程序将挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1653827/

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