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