面试: 悲观锁和乐观锁

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】装饰模式

目录 什么是装饰模式 代码实现 什么是装饰模式 Java装饰模式是一种结构型设计模式,它允许你动态地将新功能附加到对象上,通过将对象包装在一个装饰器对象中。这种模式能够在不修改现有对象结构的情况下,灵活地添加功能。 在Java中&#xf…

vue ---列表渲染

1.基本列表 v-for指令: 用于展示列表数据语法&#xff1a;v-for“(item, index) in xxx” :key“yyy”.可遍历&#xff1a;数组、对象、字符串&#xff08;用的很少&#xff09;、指定次数&#xff08;用的很少&#xff09; <!DOCTYPE html> <html><head>&l…

CTFHub(web sql注入)(三)

MYSQL 手工注入 1.判断字段数 输入1 输入2 输入3 得知字段有两个 2.判断注入类型 1 and 1 1 1 and 12 回显错误&#xff0c;说明存在sql注入 3.查看数据库内容 知道字段数量为2后&#xff0c;可以查看数据库位置 1 union select 1,2 使用union select 1,2查看未发现数…

【Java基础】21.重写(Override)与重载(Overload)

文章目录 一、重写(Override)1.方法重写2.方法的重写规则3.Super 关键字的使用 二、重载(Overload)1.方法重载2.重载规则3.实例 三、重写与重载之间的区别 一、重写(Override) 1.方法重写 重写&#xff08;Override&#xff09;是指子类定义了一个与其父类中具有相同名称、参…

阿里云OSS 存储对象的注册与使用

目录 一、什么是阿里云OSS 二、 点击免费试用 2.1 选择第一个&#xff0c;点击免费试用 ​编辑 2.2 登录管理控制台 2.3 进入Bucket 2.4、在阿里云网站上的个人中心配置Accesskey,查询accessKeyId和accessKeySecret。 2.5、进入AccssKey管理页面应该会出现下图提示&…

连接共享打印机提示0x00000011b

步骤一&#xff1a;调出运行窗口&#xff0c;输入【regedit】调出注册表编辑器。步骤二&#xff1a;找到以下路径&#xff1a;【计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print】。步骤三&#xff1a;鼠标右击——点击【新建】——选择【DWORD (32位&#…

基于TypeScript自定义Strapi users-permissions插件接口

Strapi的官方文档提供了扩展插件的方式&#xff0c;例如在src/extensions/users-permissions/strapi-server.ts中自定义&#xff0c;但文档提供的例子直接重写了原有插件的函数&#xff0c;而无法通过类似自定义API调用super.find()等方式调用原有插件的函数。 // 自定义API的…

Webservice使用教程

Webservice使用教程&#xff08;jax-ws&#xff09; Webservice的交互模式是一个类似于CS结构的模式&#xff0c;因此它需要一个Server端与一个Client端。在Client端访问Server端的接口来实现Webservice的功能。 Server端 打开IDEA创建gradle模块 webservice-01-server1 然后…

【VI/VIM】基本操作备忘录

简介 新建/打开文件 工作模式 常用命令 移动命令 文本选中 撤销、删除 复制粘贴 替换 缩排 查找 替换 插入 分屏 练习

【动态规划】C++简单多状态dp问题(打家劫舍、粉刷房子、买卖股票的最佳时机...)

文章目录 前言1. 前言 - 理解动态规划算法2. 关于 简单多状态的dp问题2.5 例题按摩师/打家劫舍 3. 算法题3.1_打家劫舍II3.2_删除并获得点数3.3_粉刷房子3.4_买卖股票的最佳时机含冷冻期3.5_买卖股票的最佳时机含手续费3.6_买卖股票的最佳时机III3.7_买卖股票的最佳时机IV 前言…

AcWing 800. 数组元素的目标和——算法基础课题解

AcWing 800. 数组元素的目标和 题目描述 给定两个升序排序的有序数组 A 和 B&#xff0c;以及一个目标值 x。 数组下标从 0 开始。 请你求出满足 A[i]B[j]x 的数对 (i,j)。 数据保证有唯一解。 输入格式 第一行包含三个整数 n,m,x&#xff0c;分别表示 A 的长度&#xf…

C# 语法全解总目录

C# 语法全解总目录 简介正文C#各大版本特性C# 语言类型C# 面向对象编程(一) 类相关(二) 继承 C#进阶(一) 委托(二) 事件(三) 元组(四) XML相关(五) 动态绑定 简介 记录C# 专栏所有文章的路径 正文 C#各大版本特性 C#各大版本特性 C# 语言类型 系列链接 C#语法系列:C# 语言类…

交换机的种类有哪些?主要都具有哪些作用?

在当今数字化时代&#xff0c;网络已经成为我们生活和工作中不可或缺的一部分。无论是家庭网络还是企业网络&#xff0c;都需要有效的网络设备来实现数据通信和资源共享。而网络交换机作为一种重要的网络设备&#xff0c;扮演着连接和管理网络设备的关键角色。本文将探讨交换机…

开源贡献代码之​探索一下CPython

探索一下Cython 本篇文章将会围绕最近给Apache提的一个feature为背景&#xff0c;展开讲讲CPython遇到的问题&#xff0c;以及尝试自己从0写一个库出来&#xff0c;代码也已经放星球了&#xff0c;感兴趣的同学可以去下载学习。 0.背景 最近在给apache arrow提的一个feature因为…

《TinyLlama: An Open-Source Small Language Model》全文翻译

【Title】 TinyLlama&#xff1a;开源小语言模型 【Abstract】 我们推出了 TinyLlama&#xff0c;这是一个紧凑的 1.1B 语言模型&#xff0c;在大约 1 万亿个令牌上进行了大约 3 个时期的预训练。 TinyLlama 基于 Llama 2&#xff08;Touvron 等人&#xff0c;2023b&#xff…

VUE项目使用.env配置多种环境以及如何加载环境

第一步&#xff0c;创建多个环境配置文件 Vue CLI 项目默认使用 .env 文件来定义环境变量。你可以通过创建不同的 .env 文件来为不同环境设置不同的环境变量&#xff0c;例如&#xff1a; .env —— 所有模式共用.env.local —— 所有模式共用&#xff0c;但不会被 git 提交&…

C语言 三目运算符

C语言 逻辑分支语句中 还有一种 三目运算符 我们编写代码如下 #include <stdio.h>int main() {const char* a 1 1 ? "表达式1" : "表达式2";printf("%s", a);return 0; }这里 我们根据逻辑 先定义一个a 然后 它的值 等于一个 三目运算…

【CodeGeeX】国产的免费AI编程助手

CodeGeeX&#xff08;官网&#xff1a;https://codegeex.cn/&#xff09;是一款基于大模型的全能的智能编程助手。它可以实现代码的生成与补全、自动添加注释、代码翻译以及智能问答等功能&#xff0c;能够帮助开发者显著提高工作效率。CodeGeeX支持主流的编程语言&#xff0c;…

Serverless:程序员必须知道的云计算利器

作为一名程序员&#xff0c;你是否厌倦了管理服务器和基础设施的繁琐任务&#xff1f;Serverless 架构横空出世&#xff0c;解放你 khỏi这些负担&#xff0c;让你专注于编写代码。 什么是 Serverless&#xff1f; Serverless 是一种云计算模型&#xff0c;它允许你编写和部署…

C++练级之路——类和对象(下)

目录 1、构造函数初始化列表 2、类型转换 3、explicit关键字 4、static成员 5、友元 友元函数 友元类 6、内部类 7、匿名对象 8、拷贝构造时的一些编译器优化 差不多结束了&#xff0c;类和对象&#xff01; 1、构造函数初始化列表 初始化列表&#xff1a;以一个冒号…