多线程java GUI在几秒钟内没有响应
我们有一个java客户机/服务器应用程序,其中GUI通常(每半小时一次)会在平均2到10秒钟内失去响应。点击不同的按钮只会在挂起几秒钟后生效
我起初以为是GC问题,但调查证明这方面没有问题
我更确信这是一个线程问题,图形线程有时会阻塞
如何检查图形线程的状态,以在日志中看到其“无响应”?我想我可以每隔一秒左右从另一个线程检查它的状态,但如何做到这一点呢?要调查哪个变量
关于如何解决这个问题还有其他想法吗
谢谢
你可以在下面搜索框中键入要查询的问题!
我们有一个java客户机/服务器应用程序,其中GUI通常(每半小时一次)会在平均2到10秒钟内失去响应。点击不同的按钮只会在挂起几秒钟后生效
我起初以为是GC问题,但调查证明这方面没有问题
我更确信这是一个线程问题,图形线程有时会阻塞
如何检查图形线程的状态,以在日志中看到其“无响应”?我想我可以每隔一秒左右从另一个线程检查它的状态,但如何做到这一点呢?要调查哪个变量
关于如何解决这个问题还有其他想法吗
谢谢
# 1 楼答案
要了解ui线程被阻塞的时间,可以执行以下操作:
}
# 2 楼答案
如果您无法在测试中重现问题,并且无法关闭生产,那么您的问题就没有简单的答案
看起来你可能有更大的问题,需要使用某种分析工具来诊断。我们使用JProbe&;JProfiler和他有很多的运气
最糟糕的情况是,您可以使用JMX编写自己的代码,按照此链接的思路执行某些操作。过去它对我很有用
http://www.javamex.com/tutorials/profiling/profiling_java5_threads_methodology.shtml
# 3 楼答案
您可以向Java进程发出
kill -QUIT
(以及Windows上的等效命令),这将导致所有线程将其堆栈跟踪转储到STDOUT,这样您就可以看到发生了什么。这还显示了哪些线程持有锁(同步块)以及哪些线程正在等待