Java中锁可以分为以下几类:
-
互斥锁(Mutex Lock):也称为独占锁(Exclusive Lock),只允许一个线程访问共享资源,其他线程必须等待当前线程释放锁才能访问。synchronized关键字就是一种互斥锁。
-
读写锁(Read-Write Lock):也称为共享-独占锁(Shared-Exclusive Lock),允许多个线程同时读取共享资源,但只允许一个线程写入共享资源,其他线程必须等待写入线程释放锁才能访问。ReentrantReadWriteLock就是一种读写锁。
-
自旋锁(Spin Lock):当线程在尝试获取锁时,如果发现锁已经被其他线程占用,就不会等待,而是一直尝试获取锁,直到获取到锁才会退出。Spin Lock的优点是减少线程切换的开销,缺点是占用CPU资源较多,适用于锁占用时间较短的情况。
-
可重入锁(Reentrant Lock):也称为递归锁,允许一个线程多次获取同一个锁,也允许多个线程同时获取锁。Reentrant Lock提供了比synchronized更加灵活的锁控制,支持公平锁和非公平锁。
-
条件变量(Condition):在使用锁控制并发访问时,经常需要等待某个条件满足才能继续执行,这时就需要使用条件变量。条件变量提供了等待/通知机制,允许线程在某个条件满足之前等待,同时允许其他线程在条件满足时通知等待的线程继续执行。Condition是Reentrant Lock的重要组成部分。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?