回答編集履歴
1
テストについて追記
test
CHANGED
@@ -38,4 +38,14 @@
|
|
38
38
|
|
39
39
|
「主キーの値は更新SQLと同じトランザクション内でインクリメントする」
|
40
40
|
|
41
|
+
## テスト
|
41
42
|
|
43
|
+
テストは仕様を満たさない場合を検出しましたが、コードをみてもテスト失敗の原因がわからないのだと思います。たとえば上の想定したコード(synchronized{}は構文的に正しくありませんが...)では、//③の箇所に複数スレッドが到達したときに同じstatic変数の値を使う主キー重複エラーが起こります。
|
44
|
+
```java
|
45
|
+
synchronized {
|
46
|
+
①static変数のインクリメント
|
47
|
+
}
|
48
|
+
//③
|
49
|
+
②static変数を使うSQLの発行
|
50
|
+
```
|
51
|
+
原因を調べるためにコードスニペットを切り出してマルチスレッドの動作を確認することをお勧めします(単体レベルのテスト)。マルチスレッドが関係するバグは再現が難しいことがあります。できるだけ小さなコード範囲で動作を調べてください。コードを見てバグを発見できるようになるまで、学習には時間がかかります。
|