読者です 読者をやめる 読者になる 読者になる

楽観ロックと悲観ロック

今日のまとめ

楽観ロック

あるデータをAさんが更新処理をしている間にBさんも処理が可能です。 でも、更新処理をAさんが先に完了してしまうと、Bさんの更新処理は失敗してしまいます。

7ちゃんとマロくんの例

f:id:marikooota:20160425231509p:plain

楽観ロックの場合、複数のユーザーが同時にデータを見ることができます。この例の場合、7ちゃんが更新中にマロくんはデータを見ることはできますが、7ちゃんが更新処理を先に完了してしまうと、マロくんは更新することはできずにエラーになってしまいます。また、更新したことは告げられないので、現在マロくんが見ているデータが最新のものであるかはわかりません。

悲観ロック

あるデータをAさんが処理していた場合、BさんはAさんの処理が終わるまで、そのデータに触ることはできません。悲観ロックはデータを読み込んだ時点から始まります。

7ちゃんとマロくんの例

f:id:marikooota:20160425233631p:plain

悲観ロックはユーザーが読み込みや更新処理を行っているときは、他のユーザーはそれらの処理を行えません。この例の場合、7ちゃんがデータ更新中に、マロくんはデータに触ることができません。7ちゃんの更新が終わってロックが解除されたタイミングで、マロくんはデータに触ることができます。悲観ロックであれば、今見ているデータは最新であると言うことが保証されますが、次に処理したい人は、前の人の処理が終わるまで待たなければいけません。

排他制御(ロック)

あるトランザクションが実行中のときに、そのトランザクションが対象としているデータを制御(ロック)し、他のトランザクションのアクセスを禁止することで、データの整合性を確保しようとする仕組みのこと。

トランザクション・・・一連の処理

整合性・・・ずれがなく揃うこと


今日の復習!!

三項演算子の書き方
条件式 ? 式1 : 式2

条件式の値がtrueだった場合、式1が処理され、falseだった場合、式2が処理されます。
if文の代わりに使える。

isEmptyメソッド

isEmptyは文字列がnull"空文字"かをチェックします。

StringUtils.isEmpty(null);     // true
StringUtils.isEmpty("");       // true
StringUtils.isEmpty(" ");     // false
StringUtils.isEmpty("meow");     // false
StringUtils.isEmpty("  meow  "); // false
isBlankメソッド(こんなメソッドもある!!)

isBlankは文字列が"空文字"かをチェックします

StringUtils.isBlank(null);     // true
StringUtils.isBlank("");       // true
StringUtils.isBlank(" ");     // true
StringUtils.isBlank("meow");     // false
StringUtils.isBlank("  meow  "); // false
isValidメソッド

戻り値boolean型
isValid();は、SQL例外がスローされた後でも接続が有効かどうかをチェックするために使用されます。 接続が有効な場合は true です。接続が有効でないか、タイムアウトするまでに接続の有効性を特定できない場合は、false です。

public boolean isValid(int timeout)
コンスタントプールの図(大石さんに教えてもらいました)

f:id:marikooota:20160426004343j:plain

参考サイト 条件演算子(三項演算子)
悲観もあれば楽観もある「トランザクション」の常識
TECHSCORE(排他制御)