zoukankan      html  css  js  c++  java
  • Java 几种锁

    自旋锁

    自旋锁顾名思义,它会等待一定时间(自旋),在这期中会什么都不做就是等资源被释放,好处在于没有了内核态用户态切换的效率损失,但是如果它一直不能访问到资源的话就会一直占用cpu资源,所以它会循环一段时间后进入阻塞状态。

    重量级锁

    synchronized就是重量级锁的实现机制,抢不到资源的进程会进入阻塞状态

    偏向锁

    顾名思义,它会偏向第一个访问资源的进程,如果说只有一个进程执行同步代码块,那么就会上个偏向锁,如果有其他线程抢占资源,那么就会升级为轻量级锁

    轻量级锁

    偏向锁升级之后就是轻量级锁,锁只可以升级而不可以降级。轻量级锁中的其他进程会进入自选状态,如果说自选失败,就会升级会重量级锁

    (图片来自他人博客)

    公平,非公平锁

    主要是指线程是否先来后到拿到锁,synchronized是非公平的,而ReentrantLock默认非公平,可以设置为公平锁

    悲观锁

    总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronizedReentrantLock等独占锁就是悲观锁思想的实现。

    乐观锁

    总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制(数据库中)和CAS算法实现



  • 相关阅读:
    (转)Golang reflect.DeepEqual函数:判断两个值是否一致
    Kubernetes字段Finalizers
    校园电子屏无人值守模式探索
    史上最全测试开发工具推荐(含自动化、性能、稳定性、抓包)
    Java 将Word转为HTML的方法
    C# 在PPT中添加数学公式
    C# 将PPT转为OFD/DPT/DPS/ODP/POTX/UOP
    C# 将Excel转为OFD、UOS
    Java 扫描识别条形码图片
    C# 加载Word的3种方法
  • 原文地址:https://www.cnblogs.com/shineyoung/p/10492076.html
Copyright © 2011-2022 走看看