2009-06-25 67 views
2

我在想,如果的Java围绕锁同步声明

synchronize (lock) { 
    ... 
} 

如果锁是java.util.concurrent.locks.Lock一个实例,把lock像任何其他对象或作为尝试,终于成语即

lock.lock(); 
try { 
    ... 
} finally { 
    lock.unlock(); 
} 

回答

13

Lock documentation

请注意,锁定实例只是 normal ob并且它们本身可以被 用作同步 声明中的目标。获取Lock实例的监视器锁 没有指定 与调用该实例的任何 lock()方法的关系。建议您为 建议避免混淆 您绝对不要在此 方式中使用锁定实例,除非在其自己的 实现中。

所以基本上,它被视为任何其他对象。而且,不要这样做。

+0

为什么“不这样做”? – hhafez 2009-06-25 21:07:54

+2

@hhafez:“不要这样做”,因为文档中提到“为避免混淆,建议您不要以这种方式使用Lock实例,除非在他们自己的实现中。” – 2009-06-25 21:12:37

3

它会像对待任何其他对象一样对待锁。

-1

C#编程语言中的lock语句可以用于一次只对一个线程限制对特定部分代码的访问。