请教大神关于Java的同步问题

飞火流云 2013-05-09 08:27:47
如下代码段:

class T extends Thread {
T() { setDemon(true);}
int a, b;
run(){
synchronized(a)
{
.....
a.wait() ; //代码运行到这里.
}

synchronized(b)
{
b.wait();
}
}
}

class T2 {
public void test()
{ b.notifyAll() ;}

}



如果线程T运行到a.wait() 时, 另外一个函数执行了b.notifyAll() ,这个时候T这个线程该做什么?
是继续a.wait()进行等待么? 那这时候收到的notifyAll()会如何处理呢?

可否这样理解,即由于b的锁T没有获得,因此T无法收到notiFyAll的信号。

本人是菜鸟,对同步机制不太熟,请大牛指教.
...全文
307 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞火流云 2013-06-04
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
int a; a.wait(); 这种写法可以?貌似锁必须加载对象上吧,对基本类型不能这么用吧。wait和notify是object类的方法,必须继承自object类(当然所有java类都是,除了基本类型)的对象才能有这个方法。 另外你对a执行wait,对b对象执行notify,根本不会唤醒的啊。
是的,这里是否可以理解为T尚在wait a的锁,在a的等待集中等待, b的锁T没有获得,因此T无法收到notiFyAll的信号。
rumlee 2013-05-23
  • 打赏
  • 举报
回复
int a; a.wait(); 这种写法可以?貌似锁必须加载对象上吧,对基本类型不能这么用吧。wait和notify是object类的方法,必须继承自object类(当然所有java类都是,除了基本类型)的对象才能有这个方法。 另外你对a执行wait,对b对象执行notify,根本不会唤醒的啊。
oh_Maxy 2013-05-21
  • 打赏
  • 举报
回复
wait和notifyAll执行的先后顺序不一样,效果是不一样的。 LZ最好搞个main方法,在那里运行一把。

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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