这个如何? http://www.gemstone.com/docs/5.5.0/product/docs/japi/com/gemstone/gemfire/distributed/DistributedLockService.html
它的 lock 方法似乎有你需要的:
lock
public abstract boolean lock(Object name, long waitTimeMillis, long leaseTimeMillis)
尝试获取名为name的锁。获取锁定后立即返回true。如果锁当前由分布式系统中的此进程或任何其他进程中的另一个线程持有,或者系统中的另一个线程已锁定整个服务,则此方法在放弃并返回false之前一直尝试获取最多等待waitMillis的锁。如果获取了锁,则会一直保持锁定,直到调用unlock(对象名称),或者直到从授予锁定起已经过了leaseTimeMillis毫秒 - 以先到者为准。
实际上,据我所知 蒙戈-Java的分布式锁 有能力通过使用到期锁定 DistributedLockOptions.setInactiveLockTimeout()
DistributedLockOptions.setInactiveLockTimeout()
我还没有尝试过,但我想我会......
编辑:我现在也尝试过,它运作良好......
String lockName = "com.yourcompany.yourapplication.somelock"; int lockTimeoutMilliSeconds = 500; String dbURI = CWConfig.get().getMongoDBConfig().getDbURI(); DistributedLockSvcFactory lockSvcFactory = new DistributedLockSvcFactory(new DistributedLockSvcOptions(dbURI)); DistributedLockSvc lockSvc = lockSvcFactory.getLockSvc(); DistributedLock lock = lockSvc.create(lockName); lock.getOptions().setInactiveLockTimeout(lockTimeoutMilliSeconds); try { lock.lock(); // Do work } finally { lock.unlock(); }