本帖最后由 隋营营 于 2012-5-7 13:08 编辑
A与B不会同时被锁住!
静态的 A 被您写的那个类锁住,而B被 this 锁住,相当于下面的代码:
public class Test {
public static void A() {
synchronized(Test.class) {
...
}
}
public void B() {
synchronized(this) {
...
}
}
}锁住A时B依然会被调用!
但是如果你在A()方法中调用了B()方法,当有线程访问A()时,这个线程同时有A和B的监视器,
这时你要小心了:如果去掉锁时先去除B的锁再去除A的锁,就会引起deadlock。
个人建议,最好不要锁住整个方法,而是尽量锁住private、final类型的属性或者代码块!
|