多线程编程遇到过的问题

1、异常:Exception in thread "Thread-12" java.lang.IllegalMonitorStateException

出现这个问题的一个场景之一:去unlock一个没有被锁上的锁。(其它场景可能出会出现这个问题,这只是其中一种可能的场景)

上代码看一眼吧:

 

错误的示例,会报  java.lang.IllegalMonitorStateException  的异常。

while(true){
    Lock lock = t.lock.writeLock();
    boolean b = false;
    try {
        b = lock.tryLock();
        System.out.println(Thread.currentThread().getName() + " get the write lock, x = " + t.x);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 如果这里不管它trylock 有没有成功,都去unlock的话,就会报以上的一个错误;
        // 为了不报错,可以先看看它有没有拿到锁,拿到了锁,再去unlock就可以了
        lock.unlock();  
        if(b){
        }
    }
}

 

改一点点,把 lock.unlock() 放到 if(b) {} 片段里面,就好了

while(true){
    Lock lock = t.lock.writeLock();
    boolean b = false;
    try {
        b = lock.tryLock();
        System.out.println(Thread.currentThread().getName() + " get the write lock, x = " + t.x);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 先判断一下,再去unlock
        if(b){
           lock.unlock(); 
        }
    }
}

 

posted @ 2022-09-17 11:13  aaacarrot  阅读(96)  评论(0编辑  收藏  举报