【发布时间】:2014-06-05 19:30:33
【问题描述】:
我知道使用静态和非静态方法同步来分别锁定类和实例的锁定概念。我无法理解的是,类级锁是如何实现的?我的意思是,类只是一个模板,没有物理意义。那么,当我们说通过同步静态方法实现类级别锁定时,会发生什么?该类的所有对象是否都被锁定或其他进程?
我可以通过搜索发现有类对象(Class.class)并且在这个类对象上获得了锁。但是那个类的所有实例又是如何被锁定的呢?
【问题讨论】:
-
Class 类也得到一个 Class 对象。
-
class is a template only, with no physical significance。错误的。每个类在 JVM 中都有其Class对象。 -
另外,你认为类的静态成员住在哪里?
-
只需使用
synchronized(ABC.class){...} -
类锁不会锁定所有实例。它提供了类级别的锁。假设您有一个静态集合来跟踪类的所有实例。在向其中添加或从中删除时,您可能希望锁定此集合。您可以在类或静态方法上同步,也可能在静态集合本身上同步。这只是意味着如果一个线程在同步块中,另一个线程将在尝试进入它时阻塞,直到第一个线程退出同步块。
标签: java multithreading synchronization locks