【问题标题】:Java blocked methoded from another threadJava 阻塞了另一个线程的方法
【发布时间】:2015-07-06 23:54:29
【问题描述】:

如果一个方法在等待语句处被阻塞,另一个线程可以调用该方法/打印语句会被执行吗? 谢谢

synchronised test() {
sysout("not blocked");
wait();
}

【问题讨论】:

  • 你为什么不试试呢?
  • 是的。 wait() 释放锁/监视器。所以其他线程可以访问这个方法(前提是锁可用
  • stackoverflow.com/questions/17343157/… 提出了类似的问题。在那里查看答案。

标签: java concurrency


【解决方案1】:

一个常见的误解是方法被锁定。事实上对象this 被锁定了。这意味着您可以为不同的对象调用相同的方法,而无需使用wait()

相反,如果一个线程获得了锁,这将排除该对象在任何其他方法中的任何其他锁定部分。

等待线程释放当前锁,以便其他方法可以获取同一对象的锁。这也意味着线程必须重新获取锁才能停止等待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多