我把同步的概念理解为: Java中的每个对象都有一个监视器和一个锁。锁是一个可以被线程获取或释放的实体,而监视器是一个实例的机制,它决定了线程是否可以获得对象上的锁。
我想澄清一下下面的例子。首先,我想创建两个对象:
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();是否每个实例都有自己的监视器和锁?还是共享的?
如果我在一个类上同步:
synchronized (MyClass.class) {
...
}它会有什么样的表现?此同步是否会阻止获取obj1和obj2锁?如果有,Java中有没有锁的层次结构?
后续:正确的说法是“对象的监视器”还是“对象的锁”?
发布于 2015-11-19 21:47:22
Java中的每个对象都有一个监视器和一个锁。
这听起来不太对劲。每个对象都有一个锁。监视器是一个过去的想法,从来没有获得太多的吸引力,但回到Java被创建时,实现者认为监视器将是下一个大事件。
将每个实例都有自己的.锁上了?
是。
如果我在一个类上同步...它会有什么样的表现?
类是一个对象。
这些对象中的每一个都有自己的锁,并且它们的锁根本不相互作用。
发布于 2015-11-19 21:47:34
如果我在一个类上同步...它会有什么样的表现?此同步是否会阻止获取obj1和obj2锁?
如果您在MyClass.class上进行同步,则只会与在MyClass.class上进行同步的其他尝试同步。因此,锁定obj1或obj2将不起作用。
如果有,
中有没有锁的层次结构?
不,Java中没有锁层次结构。
正确的说法是“对象的监视器”还是“对象的锁”?
通常,人们在谈论同步时只提到“对象的锁”。当你开始使用wait()和notify()时,监视器就开始发挥作用了,但那是另一个话题。
https://stackoverflow.com/questions/33805213
复制相似问题