【问题标题】:Is it required to use thread wait() and notify() inside a synchronized block?是否需要在同步块内使用线程 wait() 和 notify()?
【发布时间】:2013-02-13 22:59:47
【问题描述】:

在 Java 中,是否需要在 synchronized 块中使用线程 wait()notify()

【问题讨论】:

  • 这个问题令人困惑,因为如果您要使用 wait() 它必须在同步块内,但如果您要使用同步块,则不必等待/通知,你问的是哪种情况?
  • 当线程需要传递数据时,仅仅说“不要在我运行时运行相同的数据”是不够的,但每个线程必须告诉另一个线程“我有一些数据用于你”。在这种情况下,我们需要线程等待和通知。所以同步行为与 wain/notify 不同

标签: java concurrency wait notify


【解决方案1】:

没有。 Java 会自动确保标记部分由一个且只有一个线程进入。

http://tutorials.jenkov.com/java-concurrency/synchronized.html

另请参阅此问题:java: wait(), notify() and synchronized blocks


嗯..似乎是一些语言问题。

您不需要在同步块中使用等待和通知,但如果您要使用等待和通知,则必须在同步块中使用它们。

【讨论】:

    【解决方案2】:

    简而言之,yes。在调用 wait 或 notify 之前,线程必须拥有对象的监视器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多