当前位置: 代码迷 >> J2SE >> nitifyAll和return语句的有关问题
  详细解决方案

nitifyAll和return语句的有关问题

热度:189   发布时间:2016-04-23 20:19:13.0
nitifyAll和return语句的问题
如下代码块:
public int getNumber(){
      synchronized(obj){
               this.notifyAll();
               return 1;
       }
}
编译器只允许这么编写。但是这样写在return语句前面,就通知了其他线程可以竞争对象锁,此时cpu就可能去执行其他同步线程,但是此方法还有最后一个return语句未执行,会导致同步块功能失效。

有人知道以上的分析是否正确,碰到这样的问题怎么解决?方法上又不能同步其他对象
------解决思路----------------------
你这样想本身就是错误的。
obeject.wait() 和object.notify  必须需要得到相应的锁才能执行。

即 必须如下调用
synchronized(obj){
  obj.wait()
}

及synchronized(obj){
  obj.notify();
}

但楼主是 
synchronized(obj1){
  obj2.wait();
}

obj1 和obj2不是一个对象
------解决思路----------------------
楼主的想法错误,虽然你调用了notify,但是其他wait的地方,需要等return执行了之后才能够执行,因为必须要获得锁之后才能够执行啊。在return之前,当前锁并没有释放。
  相关解决方案