如下代码块:
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之前,当前锁并没有释放。