面试: 悲观锁和乐观锁

news/2024/10/22 16:34:09/

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

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

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

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

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

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


http://www.ppmy.cn/news/1425754.html

相关文章

数据结构- 顺序表-单链表-双链表 --【求个关注!】

文章目录 一 顺序表代码: 二 链表单链表双向链表 一 顺序表 顺序表是线性表的一种 所谓线性表指一串数据的组织存储在逻辑上是线性的,而在物理上不一定是线性的 顺序表的底层实现是数组,其由一群数据类型相同的元素组成,其在逻辑…

WEB 前端优化--一起学习吧之架构

Web前端优化是一个综合性的过程,需要从多个方面入手。通过不断优化和改进,可以提高网站的性能和用户体验,吸引更多用户访问和留存。 一、关键步骤和策略 压缩和优化资源: 压缩HTML、CSS、JavaScript等文件,减少文件大…

单链表(详解)

目录 一.链表的介绍二.链表的各种方法单链表的结构初始化链表为链表开辟新节点打印链表尾插头插尾删头删查找指定位置之前插入指定位置之后插入删除(pos)节点删除节点(pos)之后的节点链表的销毁(节点被一个一个地销毁) 一.链表的介…

JAVA 集合框架(四) Map集合详解和常用方法

Map集合是Java集合框架中的一个重要组成部分,它以键值对(key-value pairs)的形式存储数据。Map集合中的每个键都是唯一的,因此它不允许键的重复,而每个键可以关联一个值,同一键可以对应不同的值&#xff08…

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

3D模型处理的并行化

今天我们将讨论如何使用 Python 多进程来处理大量3D数据。 我将讲述一些可能在手册中找到的一般信息,并分享我发现的一些小技巧,例如将 tqdm 与多处理 imap 结合使用以及并行处理存档。 那么我们为什么要诉诸并行计算呢? 使用数据有时会出现…

Games104 现代游戏引擎3

Sprite Animation 序列帧动画 自由度(degrees of freedom,DoF)对于刚体而言描述它的运动需要3个位移3个旋转,一共6个自由度 顶点动画(per-vertex animation)利用网格的顶点来控制运动。此时网格上的每个顶…

软考 - 系统架构设计师 - 架构风格例题

问题一: 什么是软件架构风格? 软件架构风格指特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式。惯用模式反映了众多系统所共有的结构和语义。 集成开发环境与用户的交互方式 (实际上询问在交互方面&am…