如果线程A访问线程B的方法,恰好在等待一个条件,线程A会被卡住在该方法中吗?我怎么能这样做,线程A可以实际检查线程B是否正在等待条件,并因此被条件暂停,并在线程B完成时通过线程B的条件发出信号?监视器和锁问题
基本上,我想知道如何防止嵌套条件阻止调用嵌套调用(线程间)的父方法。
例如:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Person {
final Lock lock = new ReentrantLock();
Condition isFree = lock.newCondition();
State state;
public void eat() throws InterruptedException {
lock.lock();
try {
while (state != State.WAITING) {
isFree.await();
}
//begin eating
state = State.EATING;
Thread.sleep(1000);
state = State.WAITING;
isFree.signal();
} finally {
lock.unlock();
}
}
public void feed(Person person) throws InterruptedException {
lock.lock();
try {
while (state != State.WAITING) {
isFree.await();
}
//begin intention to feed
person.eat();
} finally {
lock.unlock();
}
}
enum State {
EATING, WAITING;
}
}
在上述例子中,它可能是发生每一Person对象是喂养另一个,从而被卡在一个争用条件。
谢谢!