Java并发控制:Lock锁实现示例
在Java中,Lock接口提供了一种对共享资源进行并发访问的机制。下面我们将通过一个简单的例子来理解Lock的使用。
假设我们有一个CountDownLatch类的实例countDown, 当计数器为0时会触发所有等待的线程。
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class LockExample {
private CountDownLatch countDown = new CountDownLatch(1);
public void lockResource() {
// 使用Lock,这里我们选择ReentrantLock
ReentrantLock lock = new ReentrantLock();
try {
// 尝试获取锁,如果当前线程持有锁,则获取失败
lock.lock();
System.out.println("资源已锁定,开始耗时操作...");
// 进行一些耗时的操作...
Thread.sleep(2000);
// 释放锁
lock.unlock();
System.out.println("耗时操作完成,解锁资源...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
LockExample example = new LockExample();
new Thread(() -> example.lockResource())).start();
try {
// 等待计数器为0
countDown.await(1, TimeUnit.MINUTES));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("所有线程已成功解锁资源...");
}
}
在这个例子中,我们使用了ReentrantLock作为Lock的实现。在lockResource方法中,当尝试获取锁失败时(当前线程持有锁),会抛出InterruptedException。
当所有线程都完成耗时操作并释放锁后,CountDownLatch会自动将计数器减少为0,触发所有等待的线程继续执行。
还没有评论,来说两句吧...