当前位置: 首页 > 知识库问答 >
问题:

获取调用 wait 方法的线程的内部锁的方法

洪育
2023-03-14

从逻辑上讲,调用< code>wait方法的线程应该已经获得了正在调用< code>wait的对象的固有锁。

oracle教程中提到“在对象的同步方法中调用< code>wait是获取内部锁的一种简单方法”,这意味着至少还有另一种方法可以获取锁。

我的问题是,为了调用< code>wait,除了在synchronized方法内部调用< code>wait之外,还有其他方法可以获取内部锁吗?...它们是什么?

共有1个答案

赫连俊雄
2023-03-14

脑海中浮现的一些(密切相关的)其他人:

>

  • 同步块中:

    synchronized (this) {
      wait();
    }
    

    在非同步方法中,从同步方法内部调用:

    synchronized void a() {
      b();
    }
    
    void b() {
      wait();
    }
    

    在从同步块内部调用的非同步方法中:

    synchronized (this) {
      b();
    }
    
    void b() {
      wait();
    }
    

  •  类似资料:
    • 1如题,我知道wait,notify,notifyAll一定要在同步代码块中使用。但我有几个问题: 1.如下,我使用ReentrantLock作为锁,为什么会报错? 然后通过Thread类运行run,为什么会提示关于java.lang.IllegalMonitorStateException错误? 2.我使用Task类里的一个静态字符串变量,比如static String mylock="mylo

    • 我有一个写文件的方法,它可能有点慢。因此,我这样做是为了避免阻止其他操作: 然而,直到在a之后执行B之后,仍然需要一段时间,我想知道是否应该这样做: 或者,换句话说,调用一个内部有线程的方法是否意味着等待该方法结束,从而等待线程结束? 只是为了澄清一些事情:我想知道两个选项是否相同,或者在第一个选项中,线程是否应该完成以启动B指令。

    • 问题内容: 首先,我想说的是,我知道这个方法是错误的,因此,我出于好奇而问这个问题。可以说我有一个这样的秋千应用程序: 基本上,当我单击按钮时,我期望图像显示,然后GUI冻结2秒钟,然后我期望图像显示。但是发生的是:我单击按钮,GUI冻结2秒钟并显示。没有之前。但是让我感到困惑的是当我把它们和。因此,当我单击按钮时,它会打印“郁金香画”,并在2秒钟后打印“考拉画”。有人可以告诉我这是怎么回事吗?问

    • 问题内容: 如何在不是线程的对象上调用和方法?那真的没有道理,对吗? 当然,这一定是有道理的,因为这两种方法可用于所有Java对象。有人可以提供解释吗?我在理解如何使用和进行线程之间通信时遇到麻烦。 问题答案: 锁定是关于保护共享数据。 锁位于要保护的数据结构上。线程是访问数据结构的事物。锁位于数据结构对象上,以防止线程以不安全的方式访问数据结构。 任何对象都可以用作内部锁(与结合使用)。这样,您

    • 我的问题:三个线程的ID分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC。 我编写的代码: 但是出现了错误 哪个地方出现了问题呢?

    • 问题内容: 我想得到调用方法。 不是 方法的名称。 这是一个如何获取调用方类的示例。 仅用于测试目的! 问题答案: 如果仅用于测试,则可能有效。它假定可以通过调用类的类访问类文件,并且类文件已使用调试符号进行编译(我希望它们用于测试!)。此代码依赖于ASM字节码库。