获取lock锁后发生错误后,线程退出,lock锁不释放

获取lock锁后发生异常后,线程退出,lock锁不释放
package com.horizon.thread.basic;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
 *  演示功能:
 *   当lock锁获得后如果发生异常,线程结束,但是 lock锁不会释放
 *  @author  <a href="wangxinchun@yahoo.com.cn">新春.王</a> 
 *
 */
public class ThreadException extends Thread{
	static Lock lock1 = new ReentrantLock();
	static Lock lock2 = new ReentrantLock();
    private static boolean flag = true;
	public ThreadException() {

	}
	
	public static void main(String[] args) {
		new ThreadException().start();
		new ThreadException().start();
	}
	
	@Override
	public void run() {
		if(flag){
			flag = false;
			lock1.lock();
			if(true){ //此处故意抛出运行时异常,当前线程结束,但是锁没有释放
				throw new NumberFormatException();
			}
			lock2.lock();
			System.out.println("flag :true");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			lock2.unlock();
			lock1.unlock();
		}else{
			flag = true;
			lock2.lock();
                           //再次获取lock1时 suspend 
			lock1.lock();
			System.out.println("flag :false");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			lock1.unlock();
			lock2.unlock();
		}
		super.run();
	}
}




  注意:不是每次运行都能看的效果,请思考下,如何看到我们想要的效果效果(请逐步调试)
1 楼 zjuttsw 20 小时前  
所以在调用lock方法后,需要在finally语句块中调用unlock方法