Java并发控制:Lock锁实现示例

原创 青旅半醒 2024-11-28 18:48 93阅读 0赞

在Java中,Lock接口提供了一种对共享资源进行并发访问的机制。下面我们将通过一个简单的例子来理解Lock的使用。

假设我们有一个CountDownLatch类的实例countDown, 当计数器为0时会触发所有等待的线程。

  1. import java.util.concurrent.CountDownLatch;
  2. import java.util.concurrent.TimeUnit;
  3. public class LockExample {
  4. private CountDownLatch countDown = new CountDownLatch(1);
  5. public void lockResource() {
  6. // 使用Lock,这里我们选择ReentrantLock
  7. ReentrantLock lock = new ReentrantLock();
  8. try {
  9. // 尝试获取锁,如果当前线程持有锁,则获取失败
  10. lock.lock();
  11. System.out.println("资源已锁定,开始耗时操作...");
  12. // 进行一些耗时的操作...
  13. Thread.sleep(2000);
  14. // 释放锁
  15. lock.unlock();
  16. System.out.println("耗时操作完成,解锁资源...");
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. public static void main(String[] args) {
  22. LockExample example = new LockExample();
  23. new Thread(() -> example.lockResource())).start();
  24. try {
  25. // 等待计数器为0
  26. countDown.await(1, TimeUnit.MINUTES));
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. System.out.println("所有线程已成功解锁资源...");
  31. }
  32. }

在这个例子中,我们使用了ReentrantLock作为Lock的实现。在lockResource方法中,当尝试获取锁失败时(当前线程持有锁),会抛出InterruptedException。

当所有线程都完成耗时操作并释放锁后,CountDownLatch会自动将计数器减少为0,触发所有等待的线程继续执行。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,93人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java并发控制:死示例

    在Java中的并发控制,特别是涉及多线程交互时,很容易出现死锁问题。下面我们将通过一个简单的示例来理解死锁。 假设我们有两个进程A和B,它们都需要两个资源:资源1(由进程A持