静态线程分析:好主意?
我帮助维护和构建一个相当大的Swing GUI,有很多复杂的交互。我经常发现自己修复了一些错误,这些错误是由于代码中其他位置的某个竞争条件而导致事情进入奇数状态的结果。
随着代码库变得越来越大,我发现在通过文档指定哪些方法具有线程限制方面,代码库变得不那么一致:最常见的是必须在 Swing EDT 上运行的方法。同样,了解并提供静态感知,通过规范在 EDT 上通知哪些(我们的自定义)侦听器,这将是很有用的。
因此,我突然想到,这应该是可以使用注释轻松执行的东西。瞧,至少有一个静态分析工具CheckThread,它使用注释来完成这项工作。它似乎允许您将方法声明为限制在特定线程(最常见的是 EDT)中,并且将标记尝试调用该方法的方法,而不同时将自身声明为仅限于该线程。
因此,从表面上看,这似乎是对源代码和构建周期的低痛苦,巨大收益的补充。我的问题是:
- 对于使用CheckThread或类似库来强制实施线程约束的人来说,是否有任何成功案例?任何失败的故事?为什么成功/失败?
- 这在理论上是好的吗?理论上有缺点吗?
- 这在实践中是好的吗?值得吗?它带来了什么样的价值?
- 如果它在实践中有效,那么支持这一点的好工具是什么?我刚刚找到了CheckThread,但承认我不完全确定我在寻找什么来找到其他做同样事情的工具。
我知道它是否适合我们取决于我们的方案。但我从未听说过有人在实践中使用这样的东西,说实话,它似乎并没有从一些一般的浏览中占据主导地位。所以我想知道为什么。