Java 同步(UserDefine.class)和同步(define1.getClass())之间有什么区别吗?

Java 同步(UserDefine.class)和同步(define1.getClass())之间有什么区别吗?,java,Java,最近我在学习Java多线程,遇到了一个问题。同步(UserDefine.class)和同步(define1.getClass())之间有什么区别吗 提前感谢:)如果define1存储对具体类型的对象的引用UserDefine,则没有区别。两种表达方式 UserDefine.class 及 将产生相同的类实例。因此,这没有区别 如果define1存储对任何其他类型对象的引用(或null),则会有差异。相应的线程将监视器锁定在不同的对象上,或者将抛出NullPointerException(对于n

最近我在学习Java多线程,遇到了一个问题。同步(UserDefine.class)和同步(define1.getClass())之间有什么区别吗


提前感谢:)

如果
define1
存储对具体类型的对象的引用
UserDefine
,则没有区别。两种表达方式

UserDefine.class

将产生相同的
实例。因此,这没有区别


如果
define1
存储对任何其他类型对象的引用(或
null
),则会有差异。相应的线程将监视器锁定在不同的对象上,或者将抛出
NullPointerException
(对于
null
情况)。

细微差别:

UserDefine.class
将始终引用UserDefine.class对象
define1.getClass()可能总是返回UserDefine.class,但通常在编程中,如果您或其他人稍后出现,可能会将UserDefine子类化,则在您的代码中,它可能不会返回您期望的结果

UserDefine.class
define1.getClass()