java - 监控和锁定说明

标签 java multithreading synchronization locking monitor

<分区>

我捕获了同步的概念如下:Java 中的每个对象都有一个监视器和一个锁。 Lock是一个实体,可以被线程获取或释放,而monitor是一个实例的机制,它决定线程是否可以获取对象的锁。

我想澄清下面的例子。 首先,我想创建两个对象:

  MyClass obj1 = new MyClass();
  MyClass obj2 = new MyClass();

是否每个实例都有自己的监视器和锁?还是共享的?

如果我在一个类上同步:

  synchronized (MyClass.class) {
     ...
  }

它将如何表现?此同步是否会阻止获取 obj1 和 obj2 锁?如果是这样,Java 中是否存在任何锁层次结构?

跟进:“对象的监视器”或“对象的锁”的正确说法是什么?

最佳答案

every object in Java has a monitor and a lock.

这听起来不对。每个对象都有一把锁。有人称锁为“监视器”。监视器是过去的一个想法,从未获得太多关注,但在创建 Java 时,实现者认为监视器将成为下一件大事。基本上,监视器是一个对象,其方法都是同步

Will each instance has its own... lock?

是的。

If I syncronize on a class ... How will it behave?

一个类一个对象。

您的示例中有三个不同的对象; obj1obj2MyClass.class。这些对象中的每一个都有自己的锁,并且它们的锁根本不会相互影响。

关于java - 监控和锁定说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805213/

相关文章:

java - 你能阻止 StringTemplate 输出到 stderr 吗?

java - 奇怪的 ClassCastException

python - python中跨多个进程的同步

java - Apache Avro 框架可以在序列化期间处理参数化类型吗?

c# - 如何知道谁杀死了我的线程

c# - 尽管是try/catch,但是异常会结束线程吗?

c - 在多线程共享进程中,原子操作似乎比信号量操作慢

java - 与jProgressBar同步复制显示

java - 通知和等待对于同步块(synchronized block)不起作用

java - PaginationAndSortingRepository 返回空