1

首先它是一个巨大的应用程序,问题涉及很多行,所以我不能真正附加任何代码。

在主要包括清除和重新添加元素到某个集合的更改之后,应用程序的摆动 GUI 冻结。在执行添加的代码时不会发生冻结,但会在一段时间后发生。奇怪的是没有线程被挂起。

我的问题是无限循环是否是这个问题的唯一解释。我觉得不太可能是这种情况,因为添加的代码完成后没有问题。可能存在一些不同步的集合访问问题,但我不认为它会导致这种情况。由于没有挂起线程,因此看起来我们也没有处理来自同步问题的死锁。

4

4 回答 4

1

到头来还是僵局

我的团队负责人告诉我,等待监视器(在“同步”上)的线程在 Eclipse 中没有显示为挂起。他找到了两个线程并要求暂停它们。然后我看到他们正在等待对方释放被占用的监视器。

死锁不是我输入的代码的错。只是我所做的更改在其他地方显示了错误的同步。

谢谢大家对我的帮助,我真的很感激。这是我关于 stackoverflow 的第一个问题,我很惊讶你的反应速度有多快。

于 2012-12-04T20:26:31.590 回答
0

庞大的应用程序 + 操作集合 -> 垃圾收集器开始了?

SO的一些相关阅读: 增加maxpermsize和最大堆大小的副作用

还有关于 GC 调优的 Oracle 文章: http ://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

于 2012-12-04T10:32:37.690 回答
0

这可能是因为在执行事件的摆动中的事件调度程序线程中等待(由于一些繁重的处理)。理想情况下,您应该在单独的线程中执行任何资源密集型任务,以便 UI 不会冻结

于 2012-12-04T10:34:46.800 回答
0

您可能已经知道这一点,但为了它,我想说,如果您没有在应用程序中长时间运行的进程中使用 Swing 工作程序,那么这将是使用它的理想情况。

于 2012-12-04T11:29:20.970 回答