ReentrantLock有个lockInterruptibly方法,该方法可被中断并抛异常,一般如果在finally里写unlock的话,在unlock时要加上判断isHeldByCurrentThread(),因为很可能unlock的线程不是lock的线程,会抛异常,进一步因为lockInterruptibly被中断时该线程并没有获得锁,然而finally里的unlock会执行,这时那个线程没有锁却要释放,会抛异常java ReentrantLock小坑
原文:http://blog.51cto.com/2839840/2052159