我现在正在学习Java MutliThread,我遇到了一个问题。在synchronized(UserDefine.class)和synchronized(define1.getClass())之间有什么区别吗?
define1 is an instance of UserDefine class.
提前致谢:)
答案 0 :(得分:3)
如果define1
存储对具体类型UserDefine
的对象的引用,则没有区别。两个表达式
UserDefine.class
和
define1.getClass()
将导致相同的Class
实例。因此没有区别。
如果define1
存储对任何其他类型(或null
)对象的引用,则会有差异。相应的线程会将监视器锁定在不同的对象上,否则将抛出NullPointerException
(对于null
情况)。
答案 1 :(得分:3)
细微差别:
UserDefine.class
将始终引用UserDefine.class对象
在您的情况下,define1.getClass();
可能总是返回UserDefine.class,但通常在编程中,如果您或其他人稍后出现,可能在您的代码中继承UserDefine,它可能无法返回您期望的内容。