这是我在接受采访时被问到的面试问题之一。在java中,我们可以使用synchronized方法执行的大部分操作也可以使用synchronized块完成。那么,为什么java提供相同机制的2种变体呢?
我想到了以下原因。 1.我们可以使用我们选择的锁(这个或另一个对象)来尽可能地创建块,其中,对于方法,它是一个完整的方法(可能是小的或大的)并且总是获得对此类或类的锁定(对于静态方法)。
有人可以告诉我还有什么原因吗?
如果已经发布,我道歉。
答案 0 :(得分:1)
同步块按照您的说法提供粒度级别的锁定。
同步方法也会锁定当前对象(可能需要或不依赖于您想要实现的目标)但是使用synchronized块可以自由地锁定其他对象,因此线程可以输入此对象的其他实例方法< / p>