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