Java并发编程(四):JUC锁的深入探讨?

2026-05-24 08:260阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1257个文字,预计阅读时间需要6分钟。

Java并发编程(四):JUC锁的深入探讨?

首先,让我们回顾一下synchronized关键字。这个关键字用于给代码段或方法加锁,确保同一时刻只有一个线程可以访问这部分代码。当遇到以下情况时:

那么想象一下,当我们遇到这样的情境时:

首先我们来回忆一下上一节讲过的synchronized关键字,该关键字用于给代码段或方法加锁,使得某一时刻它修饰的方法或代码段只能被一个线程访问。那么试想,当我们遇到这样的情况:当synchronized修饰的方法或代码段因为某种原因(IO异常或是sleep方法)被阻塞了,但是锁有没有被释放,那么其他线程除了等待以外什么事都做不了。当我们遇到这种情况该怎么办呢?我们今天讲到的Lock锁将有机会为此行使他的职责。

1.为什么需要Lock

synchronized 是Java 语言层面的,是内置的关键字;Lock 则是JDK 5 的J.U.C(java/util/currrent)包中出现的一个类,在使用时,synchronized 同步的代码块可以由JVM自动释放;Lock 需要程序员在finally块中手工释放;synchronized是比较古老的实现机制,设计较早,有一些功能上的限制:

——它无法中断一个正在等候获得锁的线程

——也无法通过投票得到锁,如果不想等下去,也就没法得到锁。

——同步还要求锁的释放只能在与获得锁所在的堆栈帧相同的堆栈帧中进行

而且对多线程环境中,使用synchronized后,线程要么获得锁,执行相应的代码,要么无法获得锁处于等待状态,对于锁的处理不灵活。而Lock提供了多种基于锁的处理机制,比如:

  1. void lock(),获取一个锁,如果锁当前被其他线程获得,当前的线程将被休眠。
阅读全文

本文共计1257个文字,预计阅读时间需要6分钟。

Java并发编程(四):JUC锁的深入探讨?

首先,让我们回顾一下synchronized关键字。这个关键字用于给代码段或方法加锁,确保同一时刻只有一个线程可以访问这部分代码。当遇到以下情况时:

那么想象一下,当我们遇到这样的情境时:

首先我们来回忆一下上一节讲过的synchronized关键字,该关键字用于给代码段或方法加锁,使得某一时刻它修饰的方法或代码段只能被一个线程访问。那么试想,当我们遇到这样的情况:当synchronized修饰的方法或代码段因为某种原因(IO异常或是sleep方法)被阻塞了,但是锁有没有被释放,那么其他线程除了等待以外什么事都做不了。当我们遇到这种情况该怎么办呢?我们今天讲到的Lock锁将有机会为此行使他的职责。

1.为什么需要Lock

synchronized 是Java 语言层面的,是内置的关键字;Lock 则是JDK 5 的J.U.C(java/util/currrent)包中出现的一个类,在使用时,synchronized 同步的代码块可以由JVM自动释放;Lock 需要程序员在finally块中手工释放;synchronized是比较古老的实现机制,设计较早,有一些功能上的限制:

——它无法中断一个正在等候获得锁的线程

——也无法通过投票得到锁,如果不想等下去,也就没法得到锁。

——同步还要求锁的释放只能在与获得锁所在的堆栈帧相同的堆栈帧中进行

而且对多线程环境中,使用synchronized后,线程要么获得锁,执行相应的代码,要么无法获得锁处于等待状态,对于锁的处理不灵活。而Lock提供了多种基于锁的处理机制,比如:

  1. void lock(),获取一个锁,如果锁当前被其他线程获得,当前的线程将被休眠。
阅读全文