
Java
lock.lock() 方法获取锁。无论是否发生异常,都会在 finally 块中调用 lock.unlock() 来释放锁,从而避免死锁问题。此外,ReentrantLock 还提供了许多高级功能,例如等待可中断、公平锁以及锁绑定多个条件等。以下是一个综合使用这些功能的例子:JavaReentrantLock lock = new ReentrantLock(true); // 创建一个公平锁Condition condition = lock.newCondition();public void accessResource() throws InterruptedException { if (lock.tryLock(1, TimeUnit.SECONDS)) { // 尝试获取锁,超时时间为 1 秒 try { // 访问共享资源的逻辑 condition.awAIt(); // 当前线程进入等待状态 } finally { lock.unlock(); // 释放锁 } } else { System.out.println(未能在规定时间内获取锁); }}public void signalThread() { lock.lock(); try { condition.signal(); // 唤醒一个等待中的线程 } finally { lock.unlock(); }}在这个示例中,我们创建了一个公平的 ReentrantLock 实例,并通过 lock.tryLock(1, TimeUnit.SECONDS) 方法尝试在 1 秒内获取锁。如果无法获取锁,该方法会返回 false,并且线程可以响应中断。同时,我们还使用了 condition.awAIt() 和 condition.signal() 方法来实现线程间的协作,这展示了锁绑定多个条件的功能。综上所述,ReentrantLock 不仅功能强大,而且提供了更高的灵活性和可控性,非常适合在高并发场景下使用。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号