Java:是否应该使用相同的对象进行同步和等待?

时间:2017-06-23 12:28:16

标签: java multithreading concurrency synchronization

在等待并通知对象时,' x'假设x.wait()和x.notify()。是否应该在同一个对象上同步等待和通知的调用?我的意思是synchronized(x){x.wait},或者使用另一个对象进行同步是ok / sensible / wrong我的意思是synchronized(y){x.wait}。

2 个答案:

答案 0 :(得分:2)

  

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

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

事实上,waitnotify的文档非常明确,如果代码不遵循该规则会发生什么:

  

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

答案 1 :(得分:0)

<conditionExpression><![CDATA["MODERNE_NOIR_ET_BLANC".equals($P{choixImpression})]]></conditionExpression>

这不是正确的用法。您正在同步对象y并尝试锁定x对象。

您可以仔细查看synchronized(y){ x.wait(); } synchronized wait个关键字的使用情况以及多线程编程。

您可以查看以下链接:

What does synchronized mean?

Difference between with volatile and synchronized

Wait Usage