《java高并发程序设计》读书笔记(4)

提高锁性能
  • 如何提高锁性能
    • 减小锁持有的时间
    • 减小锁粒度
    • 锁分离
    • 锁粗化
  • java虚拟机对锁优化的处理
    • 偏向锁:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样可以节省大量有关锁申请的操作,适合几乎没有锁竞争的场合。
    • 轻量级锁:虚拟机只是简单的将对象头部作为指针,指向持有锁的线程堆栈的内部,以此判断一个线程是否持有锁。如果获得轻量级锁成功,则可顺利进入临界区,否则,当前线程膨胀为重量级锁。
    • 自旋锁:如果当前线程暂时无法获得锁,但是什么时候获得是一个未知数,也许在将来几个CPU时钟周期之后就可以得到锁,如果这样,简单粗暴地挂起线程可能是一种得不偿失的选择,因此系统会进行一次赌注,它会假设不久的将来可以获得该锁,于是虚拟机会让当前线程做几个空循环。如果若干次能得到锁,则顺利进入临界区,否则,将线程挂起。
    • 锁消除:java虚拟机在JIT编译时,通过对运行上下文扫描,去除不可能存在的共享资源竞争的锁,通过锁消除可以节省毫无意义的请求锁时间。例如没有资源竞争的情况下使用线程安全的集合vecotr,这里锁竞争无意义,java虚拟机会自动去除这些锁。
  • ThreadLocal

    • 简单使用:只有当前线程可以访问的一个局部变量,只有当前线程可以访问数据。这是为每个应用分配不同的对象,需要在应用层面保证,它只是起到一个容器的作用。
  • 无锁

    • CAS算法:它包含三个参数CAS(V,E,N),V表示要更新的变量,E表示预期值,N表示新值。仅当V等于E时,才会将V的值设置为N,如果V值和E值不同,则说明已经有其他线程对该值做了更新,则当前线程什么都不做。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值