【发布时间】:2010-12-21 08:33:18
【问题描述】:
我只需要确认我已正确理解同步块中的锁的概念。 首先,我将讲述我所了解的。 获取对象的锁意味着没有其他线程可以访问对象类的同步代码。在同步方法的情况下,线程获取用于调用该方法的对象的锁(即隐含的 this 引用)。这意味着其他线程无法访问当前对象类的同步代码。但是,在同步块的情况下,我们可以指定我们希望线程获取锁的对象。
现在假设我们在 A 类的一个方法中的同步块获取了 B 类对象的锁。假设一个线程进入这个同步块并获取了 B 类特定对象的锁。
如果任何其他线程使用 B 类的相同对象,它将无法进入 A 类中的同步块,对吗? 而且其他线程也不能访问B类中的任何同步代码?
那么 A 类中的其他同步代码呢?因为线程已经获得了B类对象的锁,其他线程可以访问A类的其他同步代码吗?这意味着A类的对象没有锁,只有B类?
我希望人们能理解我的问题。
提前致谢。
【问题讨论】:
-
就类而言,类是无关紧要的(不幸的是,在
Class对象上标记为同步锁的静态方法 - D'oh)。将锁视为另一个对象,每个对象都携带一个最终引用(这是一个糟糕的设计!),锁定一个对象并不意味着不受锁影响的代码无法访问该对象的字段。
标签: java multithreading synchronization locking