多くの複雑な対話を伴う、かなり大規模な Swing GUI の保守と構築を支援しています。コードの別の場所で何らかの競合状態が発生して奇妙な状態になった結果、バグを修正していることに気付くことがよくあります。
コード ベースが大きくなるにつれて、どのメソッドにスレッド化の制限があるかをドキュメントで指定する方法の一貫性が失われていることがわかりました。最も一般的なのは、Swing EDT で実行する必要があるメソッドです。同様に、仕様によって EDT でどの (カスタム) リスナーに通知されるかを知り、静的な認識を提供すると便利です。
そのため、これはアノテーションを使用して簡単に適用できるものであるべきだと思いました。驚いたことに、少なくとも 1 つの静的分析ツールCheckThreadが存在し、アノテーションを使用してこれを実現しています。特定のスレッド (最も一般的には EDT) に限定されるメソッドを宣言できるようで、そのスレッドに限定されていると宣言せずにそのメソッドを呼び出そうとするメソッドにフラグを立てます。
したがって、表面的には、これは、ソースとビルド サイクルへの簡単な追加であり、巨大なゲインのように見えます。私の質問は次のとおりです。
- CheckThread または同様のライブラリを使用してスレッド化の制約を適用する人々の成功例はありますか? 失敗談は? なぜ成功/失敗したのですか?
- これは理論的には良いですか? 理論上の欠点はありますか?
- これは実際に良いですか? その価値はありますか? それはどのような価値をもたらしましたか?
- 実際に機能する場合、これをサポートするための優れたツールは何ですか? CheckThread を見つけたばかりですが、同じことを行う他のツールを見つけるために何を探しているのか完全にはわかりません。
それが私たちにとって正しいかどうかは、私たちのシナリオ次第です。しかし、実際にこのようなものを使用している人は聞いたことがありません。正直なところ、一般的なブラウジングではあまり定着していないようです。だから私はなぜだろうと思っています。