我抓住了同步的概念,如下所示:Java中的每个对象都有一个监视器和一个锁。 Lock是一个可以由线程获取或释放的实体,而monitor是一个实例的机制,它决定一个线程是否可以锁定一个对象。
我想澄清以下示例。 首先,我想创建两个对象:
class Holm : ModelBase
{
public Holm(String Name, TestSensor sensor1, TestSensor sensor2)
{
Sensor1 = sensor1;
Sensor2 = sensor2;
this.Name = Name;
Sensor1.PropertyChanged += OnSensorOnlineChanged;
Sensor2.PropertyChanged += OnSensorOnlineChanged;
}
private void OnSensorOnlineChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsOnline")
{
OnPropertyChanged(nameof(IsOnline));
}
}
}
每个实例都有自己的监视器和锁吗?还是共享的?
如果我在课堂上同步:
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
它会如何表现?这个同步块会获取obj1和obj2吗?如果是这样,Java中是否存在任何锁定层次结构?
跟进:说出"对象监视器"的正确方法是什么?或"对象的锁定"?
答案 0 :(得分:2)
Java中的每个对象都有一个监视器和一个锁。
听起来不对。每个对象都有一个锁。有些人称锁是监视器"。监视器是一个过去的想法,从来没有获得太大的牵引力,但回到Java创建时,实施者认为监视器将成为下一个大事。基本上,监视器是一个对象,其方法都是synchronized
。
每个实例都有自己的...锁定吗?
是
如果我在课堂上同步......它会如何表现?
一个类是一个对象。
您的示例中有三个不同的对象; obj1
,obj2
和MyClass.class
。这些对象中的每一个都有自己的锁,它们的锁根本不会相互影响。
答案 1 :(得分:0)
如果我在课堂上同步......它会如何表现?这个同步块会获取obj1和obj2吗?
如果您在MyClass.class
上进行同步,则只会与MyClass.class
上的其他同步尝试同步。因此锁定obj1
或obj2
将无效。
如果是这样,Java中是否有任何锁定层次结构?
不,Java中没有锁定层次结构。
这是说"对象监视器"的正确方法。或"对象的锁定"?
通常人们只会参考"对象的锁定"在谈论同步时。当您开始使用wait()
和notify()
时,监控器会发挥作用,但这是一个不同的主题。