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

外部类和内部类方法之间的锁定和同步?

乐正晟
2023-03-14
问题内容

我的问题是我是否有类似以下代码:

public class OuterClass{
   public class InnerClass{
          public synchronized methodA(){ /* does something */}
   }
}

现在,当多个线程要调用内部类方法时,它们将获取外部类对象或内部类对象的锁,并且如何修改该语句,以便我同步对外部类对象的访问/


问题答案:

当多个线程要调用内部类方法时,它们将获取外部类对象的锁

没有。

或用于内部类对象

是。

以及如何修改该语句,以便我同步访问外部类对象/

加:

synchronized (OuterClass.this)
{
}

在方法内部,但请注意,内部锁先于外部锁获取,如语法现在建议的那样。一致的锁定顺序对于防止死锁至关重要。您可能更喜欢先获取外部锁,在这种情况下,您应该这样做:

public void methodA()
{
    synchronized(OuterClass.this)
    {
        synchronized (this)
        {
            // ...
        }
    }
}

没有synchronized对方法本身进行声明。或者,如果您 想要外部锁,请执行以下操作:

public void methodA()
{
    synchronized(OuterClass.this)
    {
        // ...
    }
}


 类似资料:
  • 问题内容: 我有一个班和一个子班 好的,在05行中,id喜欢访问A类的方法测试。但是我陷入了循环,因为我不知道如何指定使用A类的方法。 有任何想法吗? 问题答案: 编辑:正如@Thilo提到的:避免在外部类和内部类中使用相同的方法名称,这将避免命名冲突。

  • 问题内容: 限制条件: 我有一个编写的Maven源代码生成器,它是从具有嵌套名称空间的某些数据文件创建POJO类的。我希望每个名称空间都嵌套为一个内部类。在某些情况下,我最终会得到内部类,这些内部类与最外部类的简单名称相同。 所有类都必须是作用域,因为这是对类型安全包装器的覆盖,例如属性文件,但是是分层的。 我不能更改名称,否则我将更改名称含义和包含数据的名称空间。 给出比我有以下代码: 内部类应

  • 本文向大家介绍内部和外部碎片化之间的区别,包括了内部和外部碎片化之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解内部和外部碎片化之间的区别- 内部碎片 分配的内存和所需空间之间的差异称为内部碎片。 在这种分段中,使用固定大小的存储块来处理数据。 当某个方法或过程大于所需的内存时,将发生此过程。 内部分段使用的方法是“最佳拟合”块。 当内存被划分为固定大小的分区时,会发生

  • 问题内容: 除了名称,这些类之间是否有任何区别? 如果我使用或不使用声明变量的方法,会有所不同吗? 我主要担心的是,我会以一种方式使用它,否则会给我带来进一步的问题。 问题答案: 外部变量集属于该类。它们被所有实例共享。 在内部(以及所有其他方法函数)创建并以其开头的变量属于对象实例。

  • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除

  • Oracle留档(在下面的链接)说: 非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的。 但在下面的示例中,我创建了一个对象(内部类),它无法访问其封闭外部类的任何方法或变量。下面是代码,你能解释一下吗? http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html 使用Main方法初始化 对于对象,我无法访问其