【问题标题】:Java: should the same object be used for synchronization and waiting?Java:同步和等待应该使用同一个对象吗?
【发布时间】:2017-06-23 12:28:16
【问题描述】:

当等待和通知对象 'x' 时,假设 x.wait() 和 x.notify() 。等待和通知的调用是否也应该在同一个对象上同步?我的意思是 synchronized(x){x.wait} ,或者使用另一个对象进行同步是可以/明智/错误的,我的意思是 synchronized(y){x.wait} 。

【问题讨论】:

  • synchronized(y){x.wait} 不起作用。你可以试试看。

标签: java multithreading concurrency synchronization


【解决方案1】:

是否应该在同一个对象上同步调用等待和通知?

它们不仅应该在同一个对象上同步,它们必须在同一个对象上同步。

事实上,wait 和 notify 的文档非常清楚如果代码不遵循该规则会发生什么:

抛出:
IllegalMonitorStateException - 如果当前线程不是此对象监视器的所有者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    相关资源
    最近更新 更多