我在我们的 Java 应用程序中遇到了另一个死锁,并开始考虑如何在未来检测潜在的死锁。我有一个如何做到这一点的想法,但它似乎太简单了。
我想听听人们对此的看法。
我计划使用典型的数据集在我们的测试环境中运行我们的应用程序几个小时。
我认为可以在我们的应用程序上执行字节码操作,这样,每当它需要一个锁(例如进入一个同步块)时,锁的细节就会被添加到一个 ThreadLocal 列表中。
我可以编写一个算法,在稍后的某个时间点,比较所有线程的列表并检查是否有任何线程以相反的顺序包含相同的锁对——这将被报告为死锁的可能性。同样,我将使用字节码操作将这种定期检查添加到我的应用程序中。
所以我的问题是:这个想法(a)是原创的,(b)是可行的吗?