Jtest -Java対応自動テストツール-
今月のピックアップ
Parasoft Jtest 8.4 技術資料
「マルチスレッドプログラミング」
Atomic変換について
Javaでは基本型・参照型の代入・参照はアトミックな操作ですが、longとdoubleはアトミックに扱われません。このため、long , doubleをスレッド間でデータ共有する場合、アトミックな操作にするために、同期ブロック内で使用するか、volatileとして宣言する必要があります。
ただし、アトミックな操作はロック取得のオーバヘッドが伴いますので、必要以上に行うとパフォーマンスの低下を招く可能性があります。Javaのマルチスレッドサポートの理解不足やマルチスレッドであることを意識するあまりに、このようなコーディングをする可能性があります。
たとえば、つぎのコード例ではアトミックな操作を可能にするAtomicLongクラスを使用していますが、この変数は同期ブロック内にあるため、二重に同期化されています。
例 3 同期が二重に行われる例
もし、この変数が同期ブロック内だけでアクセスされることが明白であれば、非アトミックな変数を使用するか、このままAtomicLongクラスを使用する場合は、同期ブロックを削除することができます。
この場合、Jtest ではつぎのようにレポートします。
この場合、Jtest ではつぎのようにレポートします。
図 2 Jtest による二重の同期化の検出
このように Jtest 8.4 では、マルチスレッドプログラミング開発をサポートする静的解析ルールが多数追加されました。
スレッドにまつわるトラブルには困難な調査がつきものです。コーディング段階からこれらのルールを適用することで、より早く確実なソフトウェア開発が促進されます。
最後にJtest 8.4 であらたに追加された「Thread Safe Programming」ルールセットに含まれるルールの一覧を掲載します。
「スレッドと同期化」カテゴリルールのほかに、マルチスレッドプログラミングの作法と関連の深いルールが多数含まれていますので、さまざまなトラブルを予防するのに役立ちます。
スレッドにまつわるトラブルには困難な調査がつきものです。コーディング段階からこれらのルールを適用することで、より早く確実なソフトウェア開発が促進されます。
最後にJtest 8.4 であらたに追加された「Thread Safe Programming」ルールセットに含まれるルールの一覧を掲載します。
「スレッドと同期化」カテゴリルールのほかに、マルチスレッドプログラミングの作法と関連の深いルールが多数含まれていますので、さまざまなトラブルを予防するのに役立ちます。











