我有两个问题。我有一个多线程 Java 应用程序。当一个线程在一个键上调用 getAndLock 之后,另一个线程立即在同一个键上调用 getAndLock 会发生什么?
在第一个线程释放锁之前,第二个线程会自动阻塞吗?或者,函数调用会返回一个空的 CAS 值吗?或者,它会抛出异常吗?
如果第一个线程删除了键(整个文档),那么第二个线程会发生什么?
我有两个问题。我有一个多线程 Java 应用程序。当一个线程在一个键上调用 getAndLock 之后,另一个线程立即在同一个键上调用 getAndLock 会发生什么?
在第一个线程释放锁之前,第二个线程会自动阻塞吗?或者,函数调用会返回一个空的 CAS 值吗?或者,它会抛出异常吗?
如果第一个线程删除了键(整个文档),那么第二个线程会发生什么?
(盐粒;我只熟悉 pecl-memcache 语义)。
文档说它将尝试获取锁三秒钟然后返回OperationTimeoutException
。(正如 mikeweid 指出的那样)如果锁已经存在,它应该立即返回并指示密钥存在于错误消息中,但文档没有说明在这种情况下会引发什么异常/错误。
至于第二个问题,如果第一个线程删除了一个键,它应该返回,就好像那个键不存在一样;在这种情况下null
。