Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。
要注意的是锁定和取消锁定出现在不同作用范围中时,必须谨慎地确保保持锁定时所执行的所有代码用 try-finally 或 try-catch 加以保护,以确保在必要时释放锁。
Lock 类还可以提供与隐式监视器锁完全不同的行为和语义,如保证排序、非重入用法或死锁检测。如果某个实现提供了这样特殊的语义,则该实现必须对这些语义加以记录。
注意,Lock 实例只是普通的对象,其本身可以在 synchronized 语句中作为目标使用。获取 Lock 实例的监视器锁与调用该实例的任何 lock()方法没有特别的关系。为了避免混淆,建议除了在其自身的实现中之外,决不要以这种方式使用 Lock 实例。
- private static ConcurrentHashMap<String,String> data = new ConcurrentHashMap<String,String>();
- private String value = null;
- public String getContent(receivingParameters) {
- lock.lock();
- try {
- //synchronized (data) {
- value = data.get(receivingParameters);
- if (value == null) {
- data.put(receivingParameters,//随机数);
- return data.get(receivingParameters);
-
- } else {
- return value;
- }
- //}
- }finally {
- lock.unlock();
- }
- }
复制代码 |