nitifyAll和return语句的问题

fso918 2014-09-20 05:34:36
如下代码块:
public int getNumber(){
synchronized(obj){
this.notifyAll();
return 1;
}
}
编译器只允许这么编写。但是这样写在return语句前面,就通知了其他线程可以竞争对象锁,此时cpu就可能去执行其他同步线程,但是此方法还有最后一个return语句未执行,会导致同步块功能失效。

有人知道以上的分析是否正确,碰到这样的问题怎么解决?方法上又不能同步其他对象
...全文
120 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2014-09-21
  • 打赏
  • 举报
回复
楼主的想法错误,虽然你调用了notify,但是其他wait的地方,需要等return执行了之后才能够执行,因为必须要获得锁之后才能够执行啊。在return之前,当前锁并没有释放。
fso918 2014-09-21
  • 打赏
  • 举报
回复
引用 1 楼 windsunmoon 的回复:
你这样想本身就是错误的。 obeject.wait() 和object.notify 必须需要得到相应的锁才能执行。 即 必须如下调用 synchronized(obj){ obj.wait() } 及synchronized(obj){ obj.notify(); } 但楼主是 synchronized(obj1){ obj2.wait(); } obj1 和obj2不是一个对象
是我自己手敲代码时敲错了,本来是同一个对象锁的。
fso918 2014-09-21
  • 打赏
  • 举报
回复
回二楼,你说的那个是手误,本来程序中写的都是同一个对象锁,只是在说明问题时用手敲代码时敲错了。。。。 怎么我自己的帖子不能编辑??
windsunmoon 2014-09-20
  • 打赏
  • 举报
回复
你这样想本身就是错误的。 obeject.wait() 和object.notify 必须需要得到相应的锁才能执行。 即 必须如下调用 synchronized(obj){ obj.wait() } 及synchronized(obj){ obj.notify(); } 但楼主是 synchronized(obj1){ obj2.wait(); } obj1 和obj2不是一个对象

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧