我有一个同步方法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
}
请帮忙。提前谢谢。
答案 0 :(得分:1)
锁定在同步块内释放和重新获取的唯一时间是调用wait
时。否则锁定将被保持,直到块退出。
如果其他线程正在调用B或C,则那些不会受到任何锁定的影响A.Any从A调用B的线程仍然会有锁定,但这对于调用B而不通过的线程并不重要A,他们不会停下来获得锁定。
答案 1 :(得分:0)
synchronized块的范围是方法。在A()中发生的方法调用是该方法范围的一部分,所以没有。这并不是说A()和其他一些线程的调用线程不能同时在b()或c()中,但是不会在方法A()上释放锁。