ReentrantLock 如何使用
ReentrantLock 是 Java 中的一个锁实现类,可以用于实现多线程的同步和互斥。
使用 ReentrantLock,你需要按照以下步骤进行操作:
-
创建一个 ReentrantLock 对象:
ReentrantLock lock = new ReentrantLock(); -
在需要保护的代码块前后使用 lock() 和 unlock() 方法来获取和释放锁:
lock.lock(); // 获取锁 try { // 需要保护的代码块 } finally { lock.unlock(); // 释放锁 } -
可以使用 tryLock() 方法来尝试获取锁,如果锁已被其他线程占用,则返回 false,否则返回 true:
if (lock.tryLock()) { try { // 获取到了锁 } finally { lock.unlock(); // 释放锁 } } else { // 没有获取到锁 } -
可以使用 lockInterruptibly() 方法来获取锁,如果锁已被其他线程占用,则当前线程会被阻塞,直到获取到锁或者被中断:
lock.lockInterruptibly(); // 获取锁,可能会被阻塞 try { // 需要保护的代码块 } finally { lock.unlock(); // 释放锁 }
ReentrantLock 还提供了其他一些方法,例如 tryLock(long time, TimeUnit unit) 可以设置获取锁的超时时间,hasQueuedThreads() 可以判断是否有线程在等待获取锁等。
需要注意的是,当使用 ReentrantLock 时,一定要确保在 finally 块中释放锁,以防止发生死锁的情况。同时,使用 ReentrantLock 时,要保证获取锁和释放锁的操作在同一个 try-finally 块中,以确保锁一定会被释放。
原文地址: http://www.cveoy.top/t/topic/imGi 著作权归作者所有。请勿转载和采集!