显示锁
本来打算写设计模式的,在周六日用了两天的时间全部看了一遍,但是写了一篇之后,发现,写的没有网上的好,感觉大家可能看不懂,所以打算继续写并发编程
设计模式,就给大家推荐一下菜鸟教程的吧,我看了一下,将的比较统一,都很不错
链接:https://www.runoob.com/design-pattern/design-pattern-tutorial.html
显示锁:
显示锁是jdk1.5之后提供的一种锁
Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显示的。
Lock接口:
lock:加锁
lockInterruptibly:中断锁
tryLock:尝试获取锁,附带超时重载
unlock:释放锁
newCondition:获取一个Condition,Condition是一个用于线程之间通信的一个类
package org.dance.day4; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * lockDemo * @author ZYGisComputer */ public class LockDemo { private Lock lock = new ReentrantLock(); private int count; /** * 累加操作 */ public void increment(){ // 加锁 lock.lock(); try { count++; }finally { // 释放锁 lock.unlock(); } } public synchronized void incrementSync(){ count++; // 可重入锁演示 incrementSync(); } }
Lock使用三范式:
1:获取锁
2:写try finally
3:在finally中释放锁
总结:获取锁完毕后,一定要在之后的代码中,添加try finally并在finally块中释放锁,因为防止代码中抛出异常报错,导致锁无法释放
Lock接口和 Synchronized比较:
Lock Sync
使用方式 复杂 简单
获取锁是否可以被中断 可以 不可以
获取锁是否可以超时 可以 不可以
是否可以尝试获取锁 可以 不可以
是否可重入 可以 可以
是否可以读写分离 可以 不可以
是否是阻塞的 不是 是
可重入锁:
什么是可重入锁?可重入锁就是支持一个线程对这个锁进行多次获取加锁,一般只有在递归一个加锁的方法的时候或者调用多个加锁的方法才会用到可重入锁,可重入锁获取了几次,就要释放几次,而Java的Synchronized和Lock接口都是提供锁的可重入的.
使用:
一般来说,如果不是,业务特殊要求锁,需要可以中断,或者获取超时,或者尝试获取,读写分离的,推荐直接使用Synchronized
作者:彼岸舞
时间:2020\11\02
内容关于:并发编程
本文来源于网络,只做技术分享,一概不负任何责任
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」