面试: 悲观锁和乐观锁

一、悲观锁的代表是synchronized和Lock 锁

  1. 其核心思想是【线程只有占有了锁,才能去操作共享变量,每次只有一个线程占锁成功,获取锁失败的线程,都得停下来等待】
  2. 线程从运行到阻塞、再从阻塞到唤醒,涉及线程上下文切换,如果频繁发生,影响性能
  3. 实际上,线程在获取synchronized和Lock锁时,如果锁已被占用,都会做几次重试操作,减少阻塞的机会

使用synchronized的互斥来保证线程安全

二、乐观锁的代表是Atomiclnteger,使用cas来保证原子性

  1. 其核心思想是【无需加锁,每次只有一个线程能成功修改共享变量,其它失败的线程不需要停止,不断重试直至成功】
  2. 由于线程一直运行,不需要阻塞,因此不涉及线程上下文切换
  3. 它需要多核cpu支持,且线程数不应超过cpu核数

乐观锁,反复尝试执行代码(使用CAS自旋比较原值并修改,同时也保证了线程安全)

相关推荐

  1. 乐观悲观

    2024-04-21 00:24:02       11 阅读
  2. 乐观悲观

    2024-04-21 00:24:02       8 阅读
  3. python乐观悲观

    2024-04-21 00:24:02       36 阅读
  4. 乐观悲观

    2024-04-21 00:24:02       20 阅读
  5. 面视题之——悲观乐观

    2024-04-21 00:24:02       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 00:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 00:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 00:24:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 00:24:02       20 阅读

热门阅读

  1. Rust---#[derive(Debug)]

    2024-04-21 00:24:02       12 阅读
  2. 单例设计模式

    2024-04-21 00:24:02       14 阅读
  3. 【数据结构】插值排序

    2024-04-21 00:24:02       10 阅读
  4. Reactive判断的API

    2024-04-21 00:24:02       13 阅读
  5. LeetCode题练习与总结:爬楼梯--70

    2024-04-21 00:24:02       11 阅读
  6. 通过HTML标签来实现文字颜色的设置

    2024-04-21 00:24:02       15 阅读
  7. mybatis批量查询List实体类

    2024-04-21 00:24:02       13 阅读
  8. List<Entity>与Map<String, Entity>互转

    2024-04-21 00:24:02       14 阅读