- PR -

排他制御のテスト方法について

1
投稿者投稿内容
レオ
常連さん
会議室デビュー日: 2006/10/14
投稿数: 21
投稿日時: 2007-09-06 18:29
お世話になっております。

現在、ファイルの作成、削除、読み込みを行うクラスを作成しております。
このクラスは複数のスレッドからアクセスされるため、ファイルの操作に
対して排他制御が必要と思っています。
排他制御としては Read/Write lock パターンが適用できるのではないか
と考え、java.util.concurrent.locks.ReadWriteLockを利用しております。

そこで、排他制御が実現できているかをテストしたいのですが、
どうテストすればよいのか見当がついておりません。

このような排他制御について、テストする方法はありますでしょうか?
よろしくお願いいたします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-09-06 20:05
複数のスレッドを作って試すしかないと思いますが、
タイミング制御のためにThread.sleep()を使用してみてはいかがでしょうか。

スレッド1:ロック取得後5秒間のスリープ
スレッド2:5秒スリープしてからロック取得

のようにシナリオを大きな時間の単位で決めれば、
比較的楽に確認できると思います。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-09-06 21:51
NIOのロック機構を使う方法であればOSレベルでロックを掛けるので、
(Windowsと仮定)エクスプローラでロック対象のファイルを開いた
ままプログラムで排他ロックを書けるとエラーなり、ロック待ちなり
します。
詳しくはこちらを↓
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3247&forum=12

DIコンテナとか使っていると、テスト用のモッククラスの初期化処理または
初期化メソッド内でロックを掛けっぱなしにして、その後の処理を実行する
という方法もあるかと思います。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-09-07 09:27
私の場合はブレークポイントで停止させてステップ実行を利用して
気になるタイミングでの並列処理が正しく同期されているかを確認します。
1

スキルアップ/キャリアアップ(JOB@IT)