次のコードはコミュニティアリは先週、コード内で技術的な問題をプッシュされます。このコードでは、自分自身をテストします。
問題が何であるかを見るために3秒、?
民間最終静的ロックロック=新しいReentrantLockの(); パブリック静的無効メイン(文字列[] args){ 試み{ lock.tryLock()。 }キャッチ(例外e){ e.printStackTrace(); }最後に{ lock.unlock()。 } }
まだ問題を参照してください?
探してください。あなたが賞賛を与えます!!!!
私はそれを見ていない:「革命が成功しなかった、同志が闘争しなければならない」ああ。実際、筆者も一つだけを見ました。OOO、OOO。ここではアリ、3点の簡潔な要約、回避ステッピングピットを基準にした説明です。
一つの問題:
tryブロックの外側に配置されるロック方法を取得し、コードがロックし、tryブロックの間で投げ得るために任意の方法を持っていない可能性があることを保証してみてください。追加コード以来試みが例外をスローした場合、それはロックを取得していない場合は、tryブロックのロックを取得するための方法は、その後、次のコードは最終的に与えられます。同じトークンは、ロック取得方法とのtryコードブロック間のコードが例外をスローし、キャッチ例外への道を試しがない、ロックを解除する方法はありません、ロックを取得できない他のスレッドにつながることができます。
質問2:
ビジネスコードブロックに入る前にロックを獲得するメカニズムを使用しようとするときは、まず現在のスレッドがロックを保持しているかどうかを判断する必要があります。
質問3:
ロック()をリリースlock.unlockとき、あなたは現在のスレッドがロックを保持しているかどうかを決定する必要があり、現在のスレッドが保持していない場合、ロックは、呼び出しがjava.lang.IllegalMonitorStateException例外がスローされます。
参考記事:https://mp.weixin.qq.com/s/Dl72umQuPIcNz_nsbE7j5w