我有两个问题。我有一个多线程Java应用程序。当一个线程在一个键上调用getAndLock时,紧接着另一个线程在同一个键上调用getAndLock会发生什么?
第二个线程是否会自动阻塞,直到第一个线程释放了
锁?还是函数调用返回的CAS值为空?还是会抛出
例外?
如果第一个线程删除了密钥(整个文档),则将发生什么情况?
第二个线程?
最佳答案
(盐粒;我只对pecl-memcache语义非常熟悉)。
documentation表示它将尝试获取锁定三秒钟,然后返回OperationTimeoutException
。 (如mikeweid所指出的),如果锁已经存在,则应立即返回并指示错误消息中存在该键,但是在这种情况下,文档未说明抛出了什么异常/错误。
至于第二个问题,如果第一个线程删除了一个键,它应该返回,就好像那个键不存在一样。在这种情况下null
。