デッドロック検出ルールを新たに備えた,ContemplateのThreadSafeバージョン1.3.1が公開された。ロックを獲得する順序が原因で,デッドロックする可能性のあるコードを検出する機能を備える。デッドロックを検出すると,どのロック獲得が原因となっているかを報告する。右に示すのは,この検出を同社のEclipseプラグインを使用して実行した場合の例だ。
InfoQでは,ThreadSafeの最初の公開リリースを2013年8月にレポートした際に,すべての状況をキャッチできていないことを指摘した。
InfoQで潜在的な"死の抱擁(deadly-embrace)"デッドロックをコードベースに挿入したところ,ThreadSafeではそれを検出することができなかった。
1.3.1リリースではこの問題が修正され,ロックの循環的な依存から発するデッドロックを検出できるようになった。
リリースでは,ルールの予測精度が改善された他,Eclipseプラグインとコマンドラインインターフェースが細かな部分で数多く改良され,6つの新ルールが導入されている。
- ロックの依存性循環によるデッドロック
- メソッドが例外をスローする場合にリリースされないロック
- コレクションビューでの同期
- 同期コレクションビュー走査中にロックが保持されない場合
- ビュー上でロックが保持された状態で同期コレクションを走査
- データをロックしていない状態でコレクションビューを走査
ThreadSafeについてさらに知るためにInfoQは,Contemplateの創業者でCEOであるDon Sannella氏に話を聞いた。
InfoQ: ThreadSafeが初めてリリースされたのは,2013年8月でしたね。採用の状況はどうでしょうか?
実際に利用が始まったのは11月に,2週間のフリートライアルを開始してからです。それ以降はさまざまな分野で,高品質なコードのメンテナンスを意識している個人開発者やチームに採用されています。
InfoQ:1.3.1ではデッドロック検出機能が追加されましたが,次のリリースには何が予定されているのでしょう?
ThreadSafe 1.3.2は大規模なプロジェクトでも使用可能なようにより高速でメモリ効率のよいものになると共に,古いJavaバージョンのサポートも改善されます。
InfoQ: Eclipse, Sonar, コマンドラインの中で,もっとも広く利用されている使用パターンはどれですか?
今のところ,EclipseとSonarが多いですね。コマンドライン版は1.3で新たに加えられました。デスクトップでもビルドサーバ上でも使用できるので,これから関心が高まるのではないかと思います。
InfoQ: IntelliJ用のプラグインをリリースする予定はありますか? NetBeanについてはどうでしょう?
IntelliJのプラグインは用意したいと思っていますが,現時点ではEclipse, Sonar, コマンドライン用の製品に注力しています。その他のIDEのユーザには,同じ機能を持ったコマンドライン版を提供しています。
InfoQ:オープンソースプロジェクトに対して,ThreadSafeのフリーライセンスを提供する計画はありますか?
すでにオープンソースプロジェクトやユーザ教育用の要求に対して,フリーライセンスを提供しています。同じようなリクエストは歓迎です。
InfoQ: その他の製品も開発しているのでしょうか,あるいはThreadSafeに集中する予定なのでしょうか?
現在のところはThreadSafeに重点を置いています。カバレッジや正確性の改善,Androidに関するナレッジの追加などを行う予定でいます。
ThreadSafeに関する詳細な情報は,ContemplateのシニアエンジニアであるRobert Atkey氏がInfoQに寄せた記事 " Discover and Diagnose Java Concurrency Problems Using Contemplate's ThreadSafe"を参考にしてほしい。ThreadSafeを紹介したYouTubeビデオ "Introducing Contemplate ThreadSafe"でも,製品の概要が手短に紹介されている。
ThreadSafe 1.3.2は次週内にリリースされる予定だ。