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

notify()调用的位置重要吗?(Java)

罗学真
2023-03-14
问题内容

假设我有以下情况:

synchronized void someMethod() {
    ...
    try {
       wait();
    }catch(InterruptedException e) {
       System.out.println("InterruptedException caught");
    } 
    ...
}

synchronized void someOtherMethod() {
    ...
    notify();  
}

然后Thread首先访问someMethod,进入wait然后someOtherMethod通知它并返回Runnable状态。notify()调用在方法中的位置重要吗?即使将notify()调用放置在方法内部的不同位置,我也没有注意到行为的变化。

Thread拨打电话时,是否应立即通知notify()


问题答案:

该位置notify()的内通话synchronized块并 不会
因为根据定义无所谓,如果你仍然在synchronized块,那么你仍然持有锁。

调用notify()时不应该立即通知线程吗?

是。调用notify()将等待队列(等待条件)中的线程之一(如果有)放入阻塞队列(等待锁)中。这确实会立即发生,但是被唤醒的线程需要获得锁才能开始运行。因此它立即移出了等待队列,但仍在等待获取锁。

顺便说一句,我建议将其编写为this.wait()this.notify()以便明确指出受影响的对象。



 类似资料:
  • 我正在测试一个删除主键列id的迁移(我希望使用外键作为主键)。当我运行并恢复迁移时,我看到表的状态是相同的,只是id列现在是最后一个。 它会以任何方式改变我的数据库的行为吗?我应该在迁移还原代码中恢复列顺序吗?

  • 当在子类中重写它时,调用油漆组件方法将其定义为超类的重要性是什么。我无法理解原因。例如:请参阅下面的代码以显示填充的弧:

  • 问题内容: 就此而言,与0xff进行按位AND运算本质上不是意味着要返回相同的值吗? 奇怪的是,如果未包含ANDing,我将得到-1,而包含ANDing则得到255。有人可以解释原因吗? 在我看来0xff只是11111111。不是吗? 问题答案: 是的,就是。但这试图显示无符号字节值,即使在Java中已签名。该值是已签署,但它是一个。 当价值被读取,打印值将产生。所以它分配给具有更大的范围,并且可

  • 这是我的主班 这是我的控制器类 这是我的fxml文件 我怎么才能修好它?我从这里尝试一切JavaFX“位置是必需的”即使它在同一个包中 更新:

  • 问题内容: 假设我有以下课程: 我想知道是否传递以下构造函数很重要: 我当前的代码工作正常,但是我想知道这是否是一个好习惯。 问题答案: 根据React团队的Ben Alpert的说法,如果您打算在构造函数内部使用,则仅需要将prop传递给构造函数。调用构造函数后,React从外部将props附加到组件。

  • 我读到方法的第一个参数是调用该方法的实例。我不明白为什么我写这篇文章 我得到一个错误TypeError:printName()缺少1个必需的位置参数:“name”。我错过了什么?