Java是否已在对象或变量上同步?

问题描述 投票:0回答:1

好吧,我将尝试清楚地表达这一点。对象是在对象本身上还是在对对象的引用上同步?

也就是说,如果有的话

Object lock1 = new Object();
Object lock2 = lock1;

synchronized (lock1)作为块代码synchronized (lock2)吗?

两者都引用相同的实际对象,只是引用不同...

认为重要的是对象,而不是引用,但我不确定。

谢谢。

java object reference synchronized
1个回答
0
投票
Object lock1 = new Object();
Object lock2 = lock1;

两者都引用相同的实际对象,只是引用不同...

这是不正确的,Java中的非原始值是对该实例的引用。因此,两者都用相同的引用引用相同的对象

您可以将该对象分配给您喜欢的任何变量,并且使用同步块将在该对象实例上进行同步。锁定监视器位于对象实例本身上。

当您查看与锁定相关的Object类的方法时,您会看到一些证据。这里是notify方法,用于通知正在等待释放锁的线程,以便它们可以执行同步块:

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()

© www.soinside.com 2019 - 2024. All rights reserved.