为了正确理解Java中的并发问题和解决方案,我正在阅读官方的Java教程。在他们定义的页面之一内部锁和同步link。在这个页面上,他们说:内部锁实际上对Java类意味着什么?
只要一个线程拥有一个内部锁,其他线程就不会获得相同的锁。当其他线程尝试 获取锁时将阻塞。
另外,它们在部分提锁在同步方法在于:
当一个线程调用一个同步方法,它自动获取 用于该方法的对象并释放它时,内部锁方法返回 。即使返回由未捕获的异常导致 ,也会发生锁定释放。
对我来说,这意味着一旦我称之为同步方法从一个线程,我将有螺纹的内部锁的保持,因为
内在锁起到两个方面的作用的同步: 强制对对象的状态进行独占访问并建立 发生在对可见性至关重要的关系之前。
会另一个线程无法调用同一类的另一个同步方法吗?如果是的话,那么同步方法的全部目的就会失败。不是吗?
您的问题不明确。当您询问“我*无法再调用另一种同步方法...”时,“我”是指什么?根据线程构建您的问题。你问是否同一个线程可以从同步方法调用同步方法?也就是说,Java固有锁重入吗?还是你质疑互斥体的效用? – erickson
内在方法意味着您不必创建一个对象来同步您的方法。相比之下,你可以通过调用'synchronized(myLock){...}'来使用外部锁。这是实践中Java并发性的一个摘录:“每个对象都有内置锁的事实只是一种方便,因此您不需要明确创建锁对象” –
我刚刚更新了问题,以便明确提到的含糊问题由@erickson .. – Swapnil