一个关于对象锁的问题
public static void main(String[] args) throws Exception {
Object o = new Object();
ReentrantLock lock = new ReentrantLock();
lock.lock();
o.wait();
}
为什么程序执行时会在wait方法处报出 java.lang.IllegalMonitorStateException异常呢 ,难道我在执行lock.lock();时没有拿到对象o的锁吗?
[解决办法]
你lock.lock()与o有半毛钱关系??
public static void main(String[] args) throws Exception {
Object o = new Object();
ReentrantLock lock = new ReentrantLock();
lock.lock();
synchronized (o) {
o.wait();
}
}
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
final Lock lock = new ReentrantLock();
final Condition condition = lock.newCondition();
public void doLogic(Object x) throws InterruptedException {
lock.lock();
try {
while (XX) {
condition.await();
}
// do something
} finally {
lock.unlock();
}
}
}