如果一个类a有一个由'synchronized'关键字标记的公共静态方法,那么是否有可能拥有类级别锁?
当该类中存在锁时,我们可以实例化该类的对象还是与实例化无关?
如果类a有一个公共静态方法,该方法被标记为'synchronized'关键字,那么是否有可能拥有class级锁?
是的,在类a上会有一个类级别的锁。
当该类中存在锁时,我们可以实例化该类的对象还是与实例化无关?
当静态方法上有锁时,它只影响其他同步的静态方法。您仍然可以创建该类的新实例。
是,锁将在class对象上保持。
引用自同步方法中的锁
您可能想知道当调用静态同步方法时会发生什么,因为静态方法与类而不是对象相关联。在这种情况下,线程获取与类关联的Class对象的内在锁。因此,对类静态字段的访问由一个锁控制,该锁与类的任何实例的锁不同。
所有试图执行同一类的其他静态同步方法的其他线程,或在此Class
实例上同步的任何其他方法将被阻塞。