有一点要注意的是, 即时
你收到这样的信息,它已经过期。换句话说,您可能被告知没有人拥有该锁,但是当您尝试获取它时,您将阻塞,因为另一个线程在支票和您尝试获取它之间取出了锁。
Brian是正确的选择
Lock,但我认为您真正想要的是它的
tryLock方法:
Lock lock = new ReentrantLock();......if (lock.tryLock()){ // Got the lock try { // Process record } finally { // Make sure to unlock so that we don't cause a deadlock lock.unlock(); }}else{ // Someone else had the lock, abort}您还可以花
tryLock一些时间等待呼叫-因此,您可以尝试在十分之一秒的时间内获取它,然后在无法获取时放弃(例如)。
(我感到遗憾的是,就我所知,Java
API没有提供与
Monitor.NET中的类相同的“内置”锁定功能。然后,同样,还有很多在线程化方面,我在这两个平台上都不喜欢其他事情-
例如,每个对象都可能有一个监视器!)



