作者adrianshum (Alien)
看板java
标题Re: [问题] 巢状synchronized 无法释放全部的lock!?
时间Wed Aug 26 19:03:16 2009
※ 引述《yangpika (狗狗洋ˇ洋)》之铭言:
: 现在有两个object o1跟o2
: o1有两个synchronized method m1,m2
: o2有一个synchronized method m3
: 现在有两个thread t1,t2
: t1会call m1 m1内部会呼叫 m3 且m3会执行wait()
: 在这情况下
: t2是不是无法执行m2
: 因为wait只是释放o2的lock 不会释放o1的lock
: 那有办法释放o1跟o2的lock吗??
你这样写, 不如写一个范例吧...
class Foo {
private Bar bar;
public synchronized foo1() {
bar.bar1();
}
public synchronized foo2() {
}
}
class Bar {
public synchronized bar1() {
wait();
}
}
类似这样吧
有人 invoke foo1() 的话, 的确那个 foo instance
的 monitor 会被占着, 另一 thread invoke foo2 会
等. 这是正常也是正确的吧.
把 foo 的 monitor 也放走的话, 反而会出问题. 会不
会你该想一想, 是不是有设计上的问题才导致这种情况?
我会建议把要 lock 的对象集中为一个, 比如 foo2() 不是
synchronized method, 而是里面一开始就 synchronized(bar) {...}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82