2018.5.28
Lock lock = new ReentrantLock();
lock.lock();
try{
}finally{
lock.unlock();
}
//注意:不要将lock方法写在try块中,因为如果在获取锁的时候发生异常,异常抛出的同时也会导致锁无故的释
//放 否则会程序会报监视状态异常
Exception in thread "线程一" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:155)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1260)
at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:460)
//ReentrantLock必须要在finally中unlock(), 否则,如果在被加锁的代码中抛出了异常,那么这个锁将会永远无法释放.
//synchronized就没有这样的问题, 遇到异常退出时,会释放掉已经获得的锁.