当前位置: 首页 > 面试题库 >

Java:嵌套同步块

袁宜
2023-03-14
问题内容

我在Heinz Kabutz的 Java专家
通讯版本中看到了这一点,尽管Kabutz博士的文章的其余部分(乃至全部)都得到了很好的解释和详细说明,但他似乎掩盖了这段代码的作用,或更重要的是,它的意义是:

public class SomeObject {
    private Object lock1;
    private Object lock2;

    public void doSomething() {
        synchronized(lock1) {
            synchronized(lock2) {
                // ...
            }
        }
    }
}

嵌套synchronized块的含义是什么?这如何影响尝试执行的不同线程doSomething()


问题答案:

有两个可能需要注意的问题

  1. 如果使用等待/通知,嵌套锁很容易导致死锁。这是为什么的解释。http://tutorials.jenkov.com/java-concurrency/nested-monitor-lockout.html

  2. 应该警惕的是,如果另一种方法希望锁定相同的两个对象,则它们必须始终以相同的顺序进行操作,否则,可能会出现如本文中所述的另一种死锁情况:如何避免嵌套同步和由此产生的死锁



 类似资料:
  • 我有一个观察者,一个观察者,一个观察者。。。 它基本上下降了4个级别。 目标有一个列表 Objective有一个 战略有一个列表 战术有一个列表 任务 显然,这看起来是设置树视图以显示此数据的完美方案。如何才能使结构中的任何更改也显示在树视图上? 我认为目标将是根节点。每当一个目标被添加到它的列表中时,我们可以监听它并提醒目标刚刚创建了一个目标。不过,我应该如何以及在哪里设置这个监听器?我是否提醒

  • 问题内容: 我有一堂课,有一个清单。银行有一种将价值从一个帐户转移到另一个帐户的方法。这个想法是同时锁定转帐中的和帐户。 为了解决这个问题,我有以下代码(请记住,这是一个非常琐碎的示例,因为仅仅是一个示例): 这有效,但不能防止 死锁 。要解决此问题,我们需要将同步更改为以下内容: 但是编译器警告我有关 嵌套的同步块 ,我相信这是一件坏事吗?另外,我不太喜欢最大/最小解决方案(我不是那个想法的提出

  • 问题内容: 我必须与API进行交互,并且响应格式(根据我的阅读)似乎结构不良。我发现一个Google 网上论坛在这里回答了一个类似的问题,但是我在实现Response类来处理Gson.fromJson时遇到了麻烦。有没有我想念的例子? 问题答案: JSON对象可以由或Javabean类表示。这是一个使用Javabean的示例。 如下使用它:

  • 本文向大家介绍Java-JFrame-swing嵌套浏览器的具体步骤,包括了Java-JFrame-swing嵌套浏览器的具体步骤的使用技巧和注意事项,需要的朋友参考一下 一、使用swing嵌套浏览器要实现的功能: 通过java的swing实现在一个窗体中嵌套一个浏览器,可以在这个浏览器中将另一个项目的内容显示出来,只需要回去另一个项目首页的url即可,这样另一个项目就可以在swing嵌套的浏览器

  • 请看下面给我带来麻烦的方法: 然后是run方法:

  • 问题内容: 在我的Java应用程序中,我使用第三方库。 但是,我发现有些奇怪,有一些嵌套的程序包,有些类的名称可能与程序包的名称相同。 恐怕我不清楚。这是一个例子: 包 在“ com.xx.a”内部有一个名为“ a”的类。 因此,如果我想将此类称为“ a” … 我写: 然后,IDE将认为我的意思是软件包“ com.xx.a.a”。 那我就不能打电话了。 我想知道为什么? 顺便说一句,图书馆提供者似