我最初以为该问题的正确答案是A,因为可以部分使用m2并在调用statementB时调用语句C,因为如果“b”不起作用,则两个锁“a”和“b”不会互相保护存在于第一个m1中。
C我认为是错误的,因为同步方法不意味着将类本身用作锁,这样,如果在同步时使用了m2,则什么也无法进入该类?
现在我想知道我对C所做的假设是否正确。因为尽管m1本身将其用作锁,但m1仍将b用作锁来保护statementB。这意味着有两个监视器(“B”和“this”),从而允许发生冲突,从而使C成为正确答案?但是我也很确定A也正确。
如果您发现我的推理有任何缺陷,或者知道正确的答案以及原因,请告诉我。
最佳答案
我会选择A。它将删除操作 statementB的互斥; 和语句C; 可能以破坏事物的方式违反了它。
B和D是锁粒度无法观察到的减少,这可能会降低性能。
C是锁粒度上的一个可观察到的变化,它可能暴露其他客户端存在问题的锁。 C在此代码的行为方面没有重大变化。这是一个技巧问题。它可能在客户端代码中很重要,但在本地不重要。它保留了所有相互排斥陈述的原产地保证。
绝对是答案。