当我们同步一些静态方法锁是在 class.class 上获取的,那么 class.class 代表什么,通过谷歌搜索和阅读一些论坛,我知道了它的 java.lang.Class 实例,并且对于内存中的所有类都存在一个与它们关联的 java.lang.Class 的实例。是吗??
除了它提供的所有主要功能在我的常规 Java 应用程序中有用的功能之外,人们可以使用它创建该类的对象并获得对它的锁定?
欢迎任何参考链接。谢谢!!
当我们同步一些静态方法锁是在 class.class 上获取的,那么 class.class 代表什么,通过谷歌搜索和阅读一些论坛,我知道了它的 java.lang.Class 实例,并且对于内存中的所有类都存在一个与它们关联的 java.lang.Class 的实例。是吗??
除了它提供的所有主要功能在我的常规 Java 应用程序中有用的功能之外,人们可以使用它创建该类的对象并获得对它的锁定?
欢迎任何参考链接。谢谢!!
...它的实例,
java.lang.Class
对于内存中的所有类,都存在一个java.lang.Class
与它们相关联的实例。
基本上,是的,尽管我认为每个类加载器只有一个副本,而不是全部。但是因为你通常只有一个类加载器......
Class
实例将类作为一个整体表示,与其他类不同,就像类的实例与该类的所有其他实例不同一样。因此,由于静态方法特定于类(就像非静态方法特定于实例一样),所以在调用静态方法时对类实例进行同步是有意义的(如果方法需要同步)。这就是为什么如果您将synchronized
关键字应用于整个方法,JLS 所说的会发生这种情况。