![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
下記のサンプルソースは、デッドロックを起こすソース
なのですが、
public class Deadlock extends Thread {
public static Object l1 = new Object();
public static Object l2 = new Object();
private int index;
public static void main(String[] a) {
Thread t1 = new ThreadA();
Thread t2 = new ThreadB();
t1.start();
t2.start();
}
private static class ThreadA extends Thread {
public void run() {
synchronized (l1) {
System.out.println("スレッド1: l1に対するロックを取得");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("スレッド1: l2のロックの開放待ち");
synchronized (l2) {
System.out.println("スレッド1: l1、l2に対するロックを取得");
}
}
}
}
private static class ThreadB extends Thread {
文字数オーばーのため削除
}
これを参考に、Junitでデッドロックを起こすサンプルを作りたいです。
MultithreadedTestCaseと
ControllableTestThreadを使い
サンプルを作りたいのですが、
英語が良くわからず苦戦しております。
なにか、よいアドバイスをいただけませんでしょうか?
よろしくお願いします
No.1ベストアンサー
- 回答日時:
まずは確認ですが、↓のサイトにあるクラスでいいですか?
MultithreadedTestCaseの方はいくつか引っかかるので…
http://www.mousepushers.com/java/mtjunit/doc/com …
ここにあるサンプルコードを見る限り、
1.ThreadA、ThreadBの親クラスをControllableTestThreadにする
4.ThreadAとThreadBのrunメソッドの中身を、testOKに移動
2.自分が作成するテストケースクラス(Deadlockクラス)は、MultithreadedTestCaseをextendsし、test~にサンプルコードを記述
3.サンプルコードにある、new TestThread~~を、ThreadAとThreadBに変更
5.ThreadA、ThreadBは、テストの実行結果をtestOk()メソッドの中で判定し、true/falseで返却
で移植そのものは終了です。
ただし、問題点は何を持って失敗/成功とするかですね。
デッドロックを起こすわけですから、ThreadA、ThreadBは停止してしまいますし…
testOKメソッドの最後でフィールドに用意したフラグを必ずtrueにするようにしておいて、
そのフラグがfalseのままだったらまだ通過してないのでOKとかですかね。
getFailures()はこの場合使わないです。
deadlockさん。
ありがとうございます(^-^)/
返事が遅くなりまして、すみませんでした。
ご指摘のとおりのサイトです。
移植の方法を詳しく教えていただき
ありがとうございます。
でも、ご指摘のとおり、
何を持って失敗/成功とするかですよね。
Junitでデッドロックを起こすサンプルを作って
デッドロックが発生したという検証を行いたかったのですが・・・
自分が意図していたものが
こちらのクラスで実現できるのか。。。
自分の目的がイマイチはっきりしていないなか、
丁寧に回答していただき本当にありがとう
ございます。
実際に、移植してみて
どのような動きをするか
検証をしてみます。
今回は、ありがとうございました。(^-^)/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#にて別クラスの関数を使いたい
-
構造 他のクラスの構造体を別...
-
visual studioのデザイナ画面で...
-
関数内の変数に<summary>コメン...
-
変数名の付け方
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
private static という変数の修飾
-
Java初級 引数に適用できません
-
VB.NET getとsetの概念がわかり...
-
オブジェクト参照がオブジェク...
-
エクセルVBA 画像を貼り付ける...
-
ワードで画像をドロップすると...
-
VB6.0で、DLLを動的に参照したい
-
java eclipse 型に解決できません
-
クエリ文字列の"?"の後を非表示...
-
javascriptからjavaを呼び出したい
-
JTextFieldの入力制限
-
Dispose()は、どんな時に使うの...
-
インスタンス参照でアクセスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
クラス間でのデータ参照
-
C#にて別クラスの関数を使いたい
-
import と extends について
-
c++,ある関数のクラスから別の...
-
C++でfriendクラスにしているの...
-
Java リフレクションについて
-
構造 他のクラスの構造体を別...
-
C#のクラスライブラリでメッセ...
-
無名パッケージからのインポート
-
親クラスから子クラスへアクセス。
-
Java
-
C# インターフェイスの実装
-
Tomcatのpropertiesファイルの...
-
C# log4netの使い方
-
ひとつのファイルにクラスは1つ?
-
dllエクスポート時のdeclspec(d...
-
a href="..." とServlet
-
実行可能jarファイルのファイル...
-
C#でほかのファイルにある自作...
おすすめ情報