首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-02-19 
获取lock锁后发生异常后,线程退出,lock锁不释放package com.horizon.thread.basicimport java.util.concu

获取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方法

热点排行