读书人

获取lock锁后发生错误后线程退出l

发布时间: 2013-02-19 11:11:40 作者: rapoo

获取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();}@Overridepublic 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方法

读书人网 >编程

热点推荐