zoukankan      html  css  js  c++  java
  • Java中的各种锁简介

    一、自旋锁 vs 互斥锁

    1. 自旋锁:当一个线程获取锁时,如果锁已经被其他线程获取,当前线程就while进行重试,不进入休眠阻塞,减少线程上线文切换,但是循环等待消耗CPU

    2. 互斥锁:当一个线程获取锁后,其余线程进入休眠阻塞,进行线程上下文切换

    二、悲观锁 vs 乐观锁

    1. 悲观锁:先锁定共享资源,同时只有一个线程执行,其余线程等待

    2. 乐观锁:不锁定,多个线程同时执行操作共享资源,当有冲突时重试,例如CAS算法

    三、可重入锁 vs 不可重入锁

    1. 可重入锁:一个线程可以多次获取一个锁

    2. 不可重入锁:一个锁只能被获取一次,被释放后才能被再次获取

    四、公平锁 vs 不公平锁

    1. 公平锁:等待时间最长的线程优先获取锁

    2. 不公平锁:存在线程饥饿问题,自旋锁是非公平锁

    五、读写锁

    1. 读锁:当有读锁时,不能加写锁,但可以加多个读锁

    2. 写锁:当有写锁时,不能加其他锁

    3. 当有多个线程加了读锁,此时有线程要加写锁,会怎么样?

    六、锁消除

    JVM在编译时,去除不可能存在共享资源竞争的锁

    参考:

    https://blog.csdn.net/qq_34337272/article/details/81252853

    https://blog.csdn.net/lengxiao1993/article/details/81568130

  • 相关阅读:
    数据库连接池
    一致性hash
    java 集合大家族
    linkedlist
    HashMap
    hashcode
    Job 逻辑执行图
    CDN
    网站缓存
    Mysql临时文件目录控制
  • 原文地址:https://www.cnblogs.com/june0816/p/7295719.html
Copyright © 2011-2022 走看看