gpt4 book ai didi

持有监视器的 Java 线程

转载 作者:行者123 更新时间:2023-11-29 03:23:31 25 4
gpt4 key购买 nike

我正在阅读有关 Java 线程的内容,碰巧阅读了 this博客。在博客中我看到一个声明:

在同步方法的执行期间,线程持有该方法对象的监视器,或者如果该方法是静态的,它持有该方法类的监视器。

谁能告诉我:

  • 一个线程持有方法对象的监视器
  • 一个线程持有方法类的监视器

最佳答案

这意味着同步实例方法大致等同于:

public class FooClass {
public void foo() {
synchronized(this) {
...
}
}
}

而同步静态方法大致等同于:

public class FooClass {
public static void foo() {
synchronized(FooClass.class) {
...
}
}
}

所以在实例方法的情况下,它将在 FooClass 的实例上同步(并且在其他线程中调用 foo 在其他实例上 将不阻塞),而在静态方法的情况下,它在 Class 对象本身上同步。

请注意,对于静态方法版本,重要的是包含该方法的 - 即使该方法名义上被称为“在”子类上(例如 SubFooClass.foo() ) 该方法仍然在声明它的类上获得监视器。

参见 JLS section 8.4.3.6了解更多详情。

关于持有监视器的 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com