Java并发篇乐观锁,悲观锁,自旋锁
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
轻量级锁 “轻量级”是相对于使用操作系统互斥量来实现的传统锁而言的。但是,首先需要强调一点的是, 轻量级锁并不是用来代替重量级锁的,它的本意是在没有多线程竞争的前提下,减少传统的重量 级锁使用产生的性能消耗。在解释轻量级锁的执行过程之前,先明白一点,轻量级锁所适应的场 景是线程交替执行同步块的情况,如果存在同一时间访问同一锁的情况,就会导致轻量级锁膨胀 为重量级锁。 Java并发编程中,锁是确保线程安全的关键机制。本文主要讨论了四种锁类型:乐观锁、悲观锁、自旋锁以及Java中的synchronized同步锁,并深入解析了synchronized锁的内部机制,包括其核心组件、实现方式以及锁的状态。 1. **乐观锁**:乐观锁假设在多线程环境下,数据一般不会产生冲突,所以在读取数据时不会加锁,只有在更新数据时才会检查是否有其他线程同时修改了数据,若有冲突则回滚操作。通常通过版本号或时间戳实现。 2. **悲观锁**:悲观锁假定数据容易产生冲突,因此在读取数据时就立即加锁,防止其他线程修改。Java中的synchronized在某种程度上可以视为悲观锁的实现。 3. **自旋锁**:自旋锁是当一个线程尝试获取锁但未成功时,不会立即阻塞,而是不断循环尝试,直到获得锁为止。自旋锁适用于锁持有时间短且持有者很快释放的场景,避免了线程上下文切换的开销。 4. **synchronized同步锁**: - **核心组件**:Wait Set(等待集合)、Contention List(竞争队列)、Entry List(候选资源队列)、OnDeck(当前竞争锁的线程)、Owner(锁持有者)。 - **实现**:synchronized基于Monitor机制,通过JVM实现,锁状态有无锁、偏向锁、轻量级锁和重量级锁四种。 - **轻量级锁**:在没有多线程竞争时,减少传统重量级锁的开销,适应线程交替执行同步块的场景。如果出现竞争,会膨胀为重量级锁。 - **偏向锁**:针对单线程频繁获取同一锁的情况,减少CAS操作,提高性能。一旦出现多线程竞争,会撤销偏向锁。 - **重量级锁**:依赖于操作系统Mutex Lock,状态转换和线程切换开销大,效率较低。 5. **锁升级**:从无锁到偏向锁,再到轻量级锁,最后到重量级锁的过程,是Java为了优化锁性能的设计策略。 6. **锁优化**: - **减少锁持有时间**:尽量缩短锁的生命周期,降低并发冲突的可能性。 - **减小锁粒度**:如ConcurrentHashMap的分段锁,提高并行度。 - **锁分离**:如ReadWriteLock,读写操作分别用不同的锁,提高并发性。 - **锁粗化**:避免对同一锁的频繁请求和释放,将多个连续的同步块合并。 - **锁消除**:编译器自动检测无锁化的可能,消除不必要的锁。 7. **线程**: - **线程方法**:wait()使线程进入WAITING状态,释放对象锁;sleep()使线程进入TIMED_WAITING状态,不释放锁;yield()让当前线程让出CPU时间片,重新竞争。 了解这些锁机制和线程操作对于编写高性能、高并发的Java程序至关重要,合理地使用锁可以有效避免数据竞争,提高程序运行效率。























剩余12页未读,继续阅读


- 粉丝: 305
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 发版庆祝活动预算报告.doc
- 第三章结构试验的量测技术11年to结8学生-365409849.ppt
- 大数据背景下的高校财务信息化建设.docx
- 虚拟网络技术在计算机网络安全中的应用实践探微.docx
- 对非生产部门中层管理者的考核流程图.doc
- 混凝土切割机安全操作规程技术交底.doc
- 基于自动化技术的矿山机电安全控制分析.docx
- 多层宿舍造价指标分析.doc
- VB计算机语言基础第五章过程资料.ppt
- microstation和geographics在水利测绘工程中的应用和开发.docx
- 市政道路施工方案.doc
- 配电箱(盘)安装工艺标准.doc
- 直接醇类燃料电池-V2-席运志(1).pptx
- 抑郁症经颅磁治疗默认网络.ppt
- 云计算对会计信息系统的影响.docx
- 我国清单计价与英式清单计价的对比分析.doc


