同步锁原理与使用场景详解
时间:2026-08-15 | 作者:星河游者 | 阅读:0synchronized同步代码块和同步方法使用一种封闭式的锁机制,使用起来非常简单,也能够解决线程同步过程中间出现的线程安全问题,但也有一些限制,例如它无法中断一个正在等候获得锁的线程,也无法通过轮询得到锁,如果不想等下去,也就没法得到锁。
从JDK 5开始,Ja va增加了一个功能更强大的Lock锁。Lock锁与synchronized隐式锁在功能上基本相同,其最大的优势在于Lock锁可以让某个线程在持续获取同步锁失败后返回,不再继续等待,另外Lock锁在使用时也更加灵活。
接下来将售票案例改为使用Lock锁进行演示,如文件1所示。
文件1 Example14.ja va
1 import ja va.util.concurrent.locks.*;
2 // 定义LockThread类实现Runnable接口
3 class LockThread implements Runnable {
4 private int tickets = 10; // 10张票
5 // 定义一个Lock锁对象
6 private final Lock lock = new ReentrantLock();
7 public void run() {
8 while (true) {
9 lock.lock(); // 对代码块进行加锁
10 if (tickets > 0) {
11 try {
12 Thread.sleep(100); // 模拟售票耗时过程
13 System.out.println(Thread.currentThread().getName()
14 + " 正在发售第 " + tickets-- + " 张票 ");
15 } catch (InterruptedException e) {
16 e.printStackTrace();
17 }finally{
18 lock.unlock(); // 执行完代码块后释放锁
19 }
20 }
21 }
22 }
23 }
24 public class Example14 {
25 public static void main(String[] args) {
26 LockThread lockThread = new LockThread();
27 // 创建并开启四个线程,模拟4个售票窗口
28 new Thread(lockThread, "窗口1").start();
29 new Thread(lockThread, "窗口2").start();
30 new Thread(lockThread, "窗口3").start();
31 new Thread(lockThread, "窗口4").start();
32 }
33 }
运行结果如图1所示。
图1 运行结果
在文件1里,是通过Lock接口的实现类ReentrantLock来创建Lock锁对象的,再借助这个锁对象的lock()方法和unlock()方法,对核心代码块完成加锁与解锁。结合图1不难看出,采用Lock同步锁同样可以实现正常售票,把线程同步过程中可能出现的安全问题处理掉。
需要特别留意的是,ReentrantLock 是 Lock 接口的实现类,也是开发中非常常见的一种同步锁。除了最基础的 lock() 和 unlock() 之外,它还额外提供了不少更灵活的锁操作能力。比如,tryLock() 就可以用来判断当前这把锁是否可获取。相比之下,使用 Lock 同步锁还有一个很实用的特点:加锁和解锁不必写在同一段代码里,可以根据实际场景放在不同的位置,更方便控制执行流程。当然,真正关键的是解锁动作一定要兜住。为了确保无论出现什么情况都能正常释放锁,让其他线程继续执行,通常都会把 unlock() 放到 finally{} 代码块里完成解锁。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
