多线程知识汇总2

本文详细介绍了Java并发编程中的锁策略,包括乐观锁、悲观锁、读写锁、自旋锁的概念和应用场景。深入讨论了synchronized的优化过程,如偏向锁、轻量级锁和重量级锁。还提到了Java中的ReentrantLock及其特性,如等待可中断和公平锁。最后,文章探讨了ConcurrentHashMap的线程安全实现,如何利用CAS机制提高并发性能,并优化了扩容策略。
摘要由CSDN通过智能技术生成

synchronized加锁
1.使用场景:共享变量改变。
2.作用:对象头加锁,同一个对象加锁同步互斥。
3.原理:
4.JVM锁优化:

Lock体系

一、锁策略(设计思想)

乐观锁: 假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。并不总是能处理所有问题,所以会引入一定的系统复杂度。
同一时间点,经常只有一个线程操作共享变量,适合乐观锁

悲观锁: 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。总是需要竞争锁,进而导致发生线程切换,挂起其他线程;所以性能不高。
同一时间点,经常有多个线程操作共享变量,适合悲观锁

读写锁: 一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。
锁有两种形态:读锁和写锁

1.当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞
2.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行加锁的线程将会被阻塞
3.当读写锁在读模式的锁状态时,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值