synchronized(UserDefine.class)和symchronized(define1.getClass())之间有什么区别吗?

时间:2015-05-26 14:46:23

标签: java

我现在正在学习Java MutliThread,我遇到了一个问题。在synchronized(UserDefine.class)和synchronized(define1.getClass())之间有什么区别吗?

define1 is an instance of UserDefine class.

提前致谢:)

2 个答案:

答案 0 :(得分:3)

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

UserDefine.class

define1.getClass()

将导致相同的Class实例。因此没有区别。

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

答案 1 :(得分:3)

细微差别:

UserDefine.class始终引用UserDefine.class对象 在您的情况下,define1.getClass();可能总是返回UserDefine.class,但通常在编程中,如果您或其他人稍后出现,可能在您的代码中继承UserDefine,它可能无法返回您期望的内容。