2
如果我有这些功能等待的线程
public void methodA(){
synchronized (ObjectAlwaysDifferent) {
....
}
}
public void methodB(){
}
而且可以在块,进入里面的线程,
Thread1 enter with Object1
Thread2 enter with Object2
而另一个线程
Thread3 want to enter with Object1
如果线程循环为:
public void run(){
while(true){
methodA();
methodB();
}
}
thread3
会在methodA
之内等待,直到object1的lock
会被释放? 或者如果监视器对象被另一个thread
锁定,它能够执行methoB
?
有可能使用Lock和condition(并发API)重写methodA()方法吗?
感谢您的回答,所以它仍然是了methodA(内),它会不会执行methoB ()如果它不消耗methodA。 – 2014-10-22 10:41:35
它会等到锁定被释放,是的。另外请记住,如果有很多线程,释放锁定时不保证顺序(随机线程将拥有锁定,而不是通过锁定请求的顺序)。如果这对你很重要,请考虑使用ReentrantLock。 – bmartins 2014-10-22 10:44:25