private final Lock lock = new ReentrantLock(); public void doSomething() { synchronized (lock) { // ... } }有什么问题
时间: 2024-03-31 14:32:27 浏览: 75
ReentrantLock与synchronized
这段代码使用了两种不同的锁机制,Lock和synchronized,这可能会导致死锁或竞争条件的问题。同时,如果在某个地方调用了lock.unlock()方法,但是在该锁上没有调用lock()方法,也会导致IllegalMonitorStateException异常。因此,建议在代码中只使用一种锁机制。如果要使用Lock,应该避免使用synchronized,反之亦然。同时,在使用Lock时,应该确保在finally块中释放锁,以避免死锁问题。
阅读全文