进入非同步块时,synchronized方法是否会锁定?

时间:2014-04-22 15:48:38

标签: java multithreading thread-safety locking synchronisation

我有一个同步方法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
}

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:1)

锁定在同步块内释放和重新获取的唯一时间是调用wait时。否则锁定将被保持,直到块退出。

如果其他线程正在调用B或C,则那些不会受到任何锁定的影响A.Any从A调用B的线程仍然会有锁定,但这对于调用B而不通过的线程并不重要A,他们不会停下来获得锁定。

答案 1 :(得分:0)

synchronized块的范围是方法。在A()中发生的方法调用是该方法范围的一部分,所以没有。这并不是说A()和其他一些线程的调用线程不能同时在b()或c()中,但是不会在方法A()上释放锁。