【发布时间】:2014-06-07 02:30:00
【问题描述】:
我有一个同步方法 A() 正在锁定类,并在其主体中调用另外两个非同步方法 B() 和 C()。我的问题是,当控制从 A() 移动到 B() 时,它会释放类上的锁,并且在 B 执行完成后控制权返回时会重新获取它。
synchronised A(){
//will lock be released here?
b();
//will lock be reacquired here?
c();
}
B(){
will lock be available here?
//do somthing
}
C(){
//do something
}
请帮忙。提前致谢。
【问题讨论】:
-
看看这是否有帮助 - stackoverflow.com/questions/9525882/…
-
B() 和 C() 是私有的吗?如果不是,则存在调用 B() 或 C() 并绕过 A() 试图强制执行的同步的危险。这可能是一件坏事。也就是说,在 A() 开始时获得的锁 - 对于调用 A() 的线程 - 将通过 A() 对 B() 和 C() 的调用保留,并在 A() 退出时结束。
标签: java multithreading thread-safety locking synchronisation