This question already has answers here:
Is there an advantage to use a Synchronized Method instead of a Synchronized Block?
(23个答案)
4年前关闭。
这是我在面试中被问到的面试问题之一。在Java中,我们可以使用同步方法完成的大多数工作,也可以使用同步块完成。那么,为什么Java提供两种相同机制的变体?
我想到了以下原因。
1.我们可以使用我们选择的锁(此对象或某个其他对象)使块尽可能小,其中,对于方法来说,它是一个完整的方法(可能很小也可能很大),并始终获得此或类的锁(对于静态方法)。
有人可以告诉我原因吗?
我很抱歉,如果这已经发布。
(23个答案)
4年前关闭。
这是我在面试中被问到的面试问题之一。在Java中,我们可以使用同步方法完成的大多数工作,也可以使用同步块完成。那么,为什么Java提供两种相同机制的变体?
我想到了以下原因。
1.我们可以使用我们选择的锁(此对象或某个其他对象)使块尽可能小,其中,对于方法来说,它是一个完整的方法(可能很小也可能很大),并始终获得此或类的锁(对于静态方法)。
有人可以告诉我原因吗?
我很抱歉,如果这已经发布。
最佳答案
如您所说,同步块提供了详细级别的锁定。
同样,同步方法会锁定当前对象(可能需要或不取决于您要实现的目标),但是通过同步块,您可以自由锁定其他对象,因此线程可以输入此对象的其他实例方法