今天学到了一段语句如下:
private final Object lockObj = new Object();
//注释1:写一个锁保证关键数据在一个时间只被一个线程使用。
synchronized(lockObj){
//注释2:不满足条件时, 将当前线程放入Wait Set,同时释放锁以减少系统开销
//注释3:因为释放了锁,其他线程就可以纷纷进来执行以下语句
while (!某种条件){
try {
lockObj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//注释4:当其他进来的线程满足了以上条件后就会往下执行到下面这段语句,然后唤醒那些等待的线程
一些语句.......
一些语句.......
一些语句.......
lockObj.notifyAll();//唤醒所有在lockObj对象上等待的线程
}
====================================
问题:我想请教一下,执行了lockObj.wait();语句释放了锁后,是不是就不能保证关键数据同一时间只能被一个线程访问了,还是有什么特别的原因可以保证(上注释为个人理解过程,有错请指正!)