- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:デッドロックに関して1)
デッドロックを起こすサンプルソースとJunitでのデッドロック作成方法
このQ&Aのポイント
- デッドロックを起こすサンプルソースとして、Javaのスレッドプログラミングにおいてデッドロックを引き起こすソースコードを紹介します。
- Junitでデッドロックを起こすサンプルを作成する方法として、MultithreadedTestCaseとControllableTestThreadの使用方法を解説します。
- 英語が苦手でも理解しやすいアドバイスを提供します。デッドロックを理解し、Junitでのデッドロック作成に役立つ情報を提供します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まずは確認ですが、↓のサイトにあるクラスでいいですか? MultithreadedTestCaseの方はいくつか引っかかるので… http://www.mousepushers.com/java/mtjunit/doc/com/mousepushers/junit/MultithreadedTestCase.html ここにあるサンプルコードを見る限り、 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でデッドロックを起こすサンプルを作って デッドロックが発生したという検証を行いたかったのですが・・・ 自分が意図していたものが こちらのクラスで実現できるのか。。。 自分の目的がイマイチはっきりしていないなか、 丁寧に回答していただき本当にありがとう ございます。 実際に、移植してみて どのような動きをするか 検証をしてみます。 今回は、ありがとうございました。(^-^)/