面试: 悲观锁和乐观锁

embedded/2024/9/22 14:32:55/

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

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

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

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

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

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


http://www.ppmy.cn/embedded/9838.html

相关文章

XiaodiSec day025 Learn Note 小迪渗透学习笔记

XiaodiSec day025 Learn Note 小迪渗透学习笔记 记录得比较凌乱,不尽详细 day25 sql 注入 知识点 mysql 注入 mssql 注入 postgreSQL 注入 详细点: access 无高权限注入点,智能暴力猜解,不像 mysql 中的 schema mysql,postgr…

基于springboot+vue的流浪宠物管理系统

一、系统架构 前端:vue | element-ui | html 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-注册 04. web端-登录 05. …

React自定义Hook函数:高效组件开发的秘密武器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java入门四步走

1. 简单的入门语法: 1.1 数据类型: 基本数据类型: 整数类型 —— byte、short、int、long, 浮点类型 —— float、double 字符类型 —— char 布尔类型 —— boolean 引用数据类型: 接口(interface)、数…

Scikit-Learn支持向量机分类

Scikit-Learn 支持向量机分类 1、支持向量机(SVM)1.1、SVM概述1.2、SVM原理1.3、SVM的损失函数1.4、支持向量机分类的优缺点 2、Scikit-Learn支持向量机分类2.1、Scikit-Learn支持向量机分类API2.2、支持向量机分类初体验(手写数字识别&#…

网络爬虫软件学习

1 什么是爬虫软件 爬虫软件,也称为网络爬虫或网络蜘蛛,是一种自动抓取万维网信息的程序或脚本。它基于一定的规则,自动地访问网页并抓取需要的信息。爬虫软件可以应用于大规模数据采集和分析,广泛应用于舆情监测、品牌竞争分析、…

《架构师启示录》三大层次学习企业架构框架TOGAF

对于一名架构师来讲,如果说编程语言是知识库层次中的入门石,那么企业架构框架则相当于知识库层次中的金字塔尖。如果想成长为企业级的架构师,企业架构框架是必须要攀登的高塔。 目前国内绝大多数企业采用TOGAF标准,因此我们的讨论…

JavaScript零基础进阶2024详解

数组 JS中的数组相当于Java中的集合 数组长度可变 元素可变 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…