Java并发基础(9)—— 显示锁Lock

本文探讨了Java中的Lock与synchronized的区别,强调了Lock的灵活性,如可中断、超时获取和尝试获取锁。介绍了Lock的使用标准,强调释放锁应在finally块中。进一步讲解了Lock接口的主要API,包括lock、unlock、tryLock和Condition。Condition提供了比synchronized更精细的线程控制,允许创建多个Condition以实现特定条件的等待/通知模式。
摘要由CSDN通过智能技术生成

目录

一 、背景

1.1 Lock锁和synchronized关键字锁的对比

         1.2 使用Lock标准范式

二、学习Lock

2.1 概念

2.2 lock接口提供的API

2.3 Condition

2.4 Condition的API

2.4 demo


一 、背景

之前我们学习了Synchronized关键字,它是Java语言内置的特性,因此也被称为内置锁

同时在使用时,只需要包围需要加锁的代码即可,不需要我们考虑锁的获取和释放,因此也被称为隐式锁

这样看来,使用Synchronized实现锁机制,代码会很简单,但有时并不是很灵活

在一些场景下,Synchronized就无法满足我们的需求

比如:获取锁可以被中断、超时获取锁、尝试获取锁,这些Synchronized都无法做到

为了满足这些需求,java为我们提供了显示锁Lock

1.1 Lock锁和synchronized关键字锁的对比

表格来源:https://blog.csdn.net/jiaqingShareing/article/details/88824830

类别 synchronized锁 Lock锁
存在层次 在Jvm的层面 一个类
锁的释放

1、获取了锁的线程执行完毕后,主动释放锁;

2、线程在执行时发生异常,Jvm强迫线程释放锁;

必须在finally块中释放锁,不然会造成死锁
锁的获取 一个线程获取了锁,另外一个线程必须等待锁被释放才能继续获取 支持多种锁的获取的方式,比如超时获取锁,在指定时间内没获取到锁,则不再继续阻塞等待
锁的状态 不能判断锁的状态 可以判断锁的状态
锁的类型 可重入 不可中断 非公平 可重入 可中断 可公平 可不公平
适合场景 少量同步 大量同步

1.2 使用Lock标准范式

必须在finally块中释放锁,不然会造成死锁,所以要养成良好的习惯

           try {
                lock.lock();     //获取锁  
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值