当前位置: 首页 > news >正文

并发编程-锁的分类

锁的分类

可重入锁&不可重入锁

  1. 可重入:当一个线程获取某个锁后,再次获取这个锁的时候是可以直接拿到的。
  2. 不可重入:当一个线程获取某个锁之后,再次获取这个锁的时候拿不到,必须等自己先释放锁再获取。
  3. synchronized、ReentrantLock、ReentrantLockReadWriteLock都是可重入锁。

乐观锁&悲观锁

  1. 乐观锁:当一个获取不到锁时,可以再次让CPU调度,重新尝试获取锁
  2. 悲观锁:当一个线程获取不到资源时,线程被挂起(BLOCKED,WAITING状态)。注意:线程挂起涉及到内核态和用户态的切换,比较消耗资源
  3. 用户态:JVM可以自行执行的指令,不需要操作系统执行。
  4. 内核态:JVM不可以自行执行,需要操作系统执行。
  5. synchronized、ReentrantLock、ReentrantLockReadWriteLock都是悲观锁,而Java中的CAS操作是一种乐观锁的实现。

共享锁&互斥锁

  1. 互斥锁:同一时间点只能有一个线程持有互斥锁。
  2. 共享锁:同一时间可以允许多个线程同时持有共享锁。
  3. synchronized和ReentrantLock是互斥锁。
  4. ReentrantLockReadWriteLock在读锁时候是共享锁,写锁时候是互斥锁。

公平锁&非公平锁

假设A线程持有锁,B线程正在等待锁,这个时候C线程来了

  1. 公平锁:C线程必须再B线程之后排队,必须等B线程获取锁或取消排队后C线程才能尝试获取锁。
  2. 非公平锁:C线程无视B的存在,先尝试获取锁,如果拿到锁就可以去执行业务逻辑,如果没拿到还是要去B线程后排队,等待B线程拿到锁,才能尝试获取锁
  3. synchronized是非公平锁
  4. ReentrantLock、ReentrantLockReadWriteLock可以是公平锁,也可以是非公平锁。

相关文章:

并发编程-锁的分类

锁的分类 可重入锁&不可重入锁 可重入:当一个线程获取某个锁后,再次获取这个锁的时候是可以直接拿到的。不可重入:当一个线程获取某个锁之后,再次获取这个锁的时候拿不到,必须等自己先释放锁再获取。synchronized…...

K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用

一、Kubernetes 的基本概念和术语 一、资源对象 ​ Kubernetes 的基本概念和术语大多是围绕资源对象 Resource Object 来说的,而资源对象在总体上可分为以下两类: 1、某种资源的对象 ​ 例如节点 Node) Pod 服务 (Service) 、存储卷 (Volume)。 2、…...

在VSCode上创建Vue项目详细教程

1.前期环境准备 搭建Vue项目使用的是Vue-cli 脚手架。前期环境需要准备Node.js环境,就像Java开发要依赖JDK环境一样。 1.1 Node.js环境配置 1)具体安装步骤操作即可: npm 安装教程_如何安装npm-CSDN博客文章浏览阅读836次。本文主要在Win…...

Go语言入门之流程控制简述

Go语言入门之流程控制简述 1.if语句 if语句和其他语言一样,只不过go语言的if不需要用括号包裹 if 语句的分支代码块的左大括号与 if 关键字在同一行上,这是 go 代码风格的统一要求 简单实例: func main() {// 猜数字a : 2if a > 0 {if a…...

接口测试框架基于模板自动生成测试用例!

引言 在接口自动化测试中,生成高质量、易维护的测试用例是一个重要挑战。基于模板自动生成测试用例,可以有效减少手工编写测试用例的工作量,提高测试的效率和准确性。 自动生成测试用例的原理 为了实现测试用例数据和测试用例代码的解耦&a…...

C++ STL stable_sort用法

一&#xff1a;功能 对区间内元素进行排序&#xff0c;保证相等元素的顺序&#xff08;稳定排序&#xff09; 二&#xff1a;用法 #include <iostream>struct Record {std::string label;int rank; };int main() {std::vector<Record> data {{"q", 1},…...

YOLO v8进行目标检测的遇到的bug小结

OSError: [WinError 1455] 页面文件太小&#xff0c;无法完成操作。 我的python环境是放在C盘的&#xff1a; 在“我的电脑”点击鼠标右键&#xff0c;打开“属性”点击高级系统设置点击“设置”找到“高级”点击“更改”分配“虚拟内存”&#xff08;这里需要重启电脑才能生…...

FastAPI -- 第二弹(响应模型、状态码、路由APIRouter、后台任务BackgroundTasks)

响应模型 添加响应模型 from typing import Anyfrom fastapi import FastAPI from pydantic import BaseModel, EmailStrapp FastAPI()class UserIn(BaseModel):username: strpassword: stremail: EmailStrfull_name: str | None Noneclass UserOut(BaseModel):username: s…...

案例 | 人大金仓助力山西政务服务核心业务系统实现全栈国产化升级改造

近日&#xff0c;人大金仓支撑山西涉企政策服务平台、政务服务热线联动平台、政务网、办件中心等近30个政务核心系统完成全栈国产化升级改造&#xff0c;推进全省通办、跨省通办、综合业务受理、智能审批、一件事一次办等业务的数字化办结进程&#xff0c;为我国数字政务服务提…...

如何用python写接口

如何用python写接口&#xff1f;具体步骤如下&#xff1a;  1、实例化server 2、装饰器下面的函数变为一个接口 3、启动服务 开发工具和流程&#xff1a; python库&#xff1a;flask 》实例化server&#xff1a;server flask.Flask(__name__) 》server.route(/index,met…...

轻量级可扩展易航网址引导系统源码V2.45

由于现在网站行业的不稳定&#xff0c;导致很地址频繁更换&#xff0c;不仅是网站&#xff0c;联系QQ&#xff0c;加群链接等需要更换时&#xff0c;好不容易发展的客户会因为找不到您新的网站地址而流失&#xff0c;有了引导页以后就可以安心地宣传无需担心客户丢失的问题。 …...

解决ESLint和Prettier冲突的问题

在配置了ESLint的项目中使用Prettier进行格式化可能会出现冲突&#xff0c;不如Prettier配置了使用双引号&#xff0c;ESLint配置了单引号&#xff0c;当然可以一个一个改成一样的配置&#xff0c;但是比较麻烦。我发现可以直接使用ESLint的规则进行格式化。在VSCode配置过程如…...

C判断一个点在三角形上

背景 鼠标操作时&#xff0c;经常要判断是否命中显示控件&#xff0c;特开发此算法快速判断。 原理 三角形三等分点定理是指在任意三角形ABC中&#xff0c;可以找到三个点D、E和F&#xff0c;使得线段AD、BE和CF均等分三角形ABC。 这意味着三个等分点分别位于三个边界上&…...

物业系统自主研发接口测试框架

1、自主研发框架整体设计 1.1、什么是测试框架? 在了解什么是自动化测试框架之前&#xff0c;先了解一下什么叫框架?框架是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架…...

手机和电脑通过TCP传输

一.工具 手机端&#xff1a;网络调试精灵 电脑端&#xff1a;野火网络调试助手 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信…...

Git 在commit后,撤销commit

1. 撤销已经add&#xff0c;但是没有commit的问题 git reset HEAD 2. 撤销已经commit&#xff0c;但是没有push到远端的文件&#xff08;仅撤销commit 保留add操作&#xff09; 撤销上一次的提交 git reset --soft HEAD^windows 系统使用提示 more&#xff0c;需要多加一个…...

多模态大模型 - MM1

1. 摘要 本文主要通过分析模型结构和数据选择讨论如何构建一个好的多模态大模型&#xff08;MLLM&#xff09;&#xff0c;并同时提出了MM1模型&#xff0c;包括30B dense版本和64B的MoE版本。 具体贡献&#xff1a; 模型层面&#xff1a;影响效果的重要性排序为&#xff1a;…...

FPGA设计之跨时钟域(CDC)设计篇(2)----如何科学地设计复位信号?

1、复位是干嘛的? 时钟信号和复位信号应该是一个数字系统最重要和最常用的两个信号了。时钟的重要性大家都懂,没有时钟整个系统就无法同步,自然也就谈不上运行了。那么复位(reset)到底是干嘛的? 所有的数字系统在上电的时候都会进行复位,这样才能确保该系统的初始运行状…...

GPS北斗标准时钟同步服务器结构是什么?安徽京准

GPS北斗标准时钟同步服务器结构是什么&#xff1f;安徽京准 GPS北斗标准时钟同步服务器结构是什么&#xff1f;安徽京准 电厂时钟同步系统组成及配置 随着计算机和网络通信技术的飞速发展&#xff0c;火电厂热工自动化系统数字化、网络化的时代已经到来。一方面它为控制和信息系…...

9.5 栅格图层符号化多波段彩色渲染

文章目录 前言多波段彩色渲染QGis设置为多波段彩色二次开发代码实现多波段彩色 总结 前言 介绍栅格图层数据渲染之多波段彩色渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 多波段彩色渲染 以“3420C_2010_327_RGB_LATLNG.tif”数据为例&#xff0c…...

告别黑窗口:手把手教你用PCL CloudViewer自定义点云可视化背景与颜色

告别黑窗口&#xff1a;手把手教你用PCL CloudViewer自定义点云可视化背景与颜色 第一次打开PCL的CloudViewer时&#xff0c;那个漆黑的窗口总让人感觉少了点什么——无论是学术汇报还是工程调试&#xff0c;默认的黑色背景既不利于突出点云特征&#xff0c;也缺乏专业感。其实…...

视觉化看板工具怎么选?9 款创意团队项目协作平台优势分析

本文将深入对比 9 款支持视觉化看板的项目协作工具&#xff1a;Worktile、Trello、Asana、monday.com、ClickUp、Wrike、Notion、Jira、Teambition&#xff0c;重点分析它们在创意团队中的项目管理能力、适用场景、部署方式、协作效率与安全合规差异&#xff0c;帮助企业选型者…...

计算机毕业设计:Python城市交通客流预测分析平台 Flask框架 可视化 Requests爬虫 Arima模型 LSTM 深度学习(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

设备预测性维护模型构建方法

构建设备预测性维护模型需要结合数据采集、算法选择和实际应用场景。以下是核心步骤&#xff1a;数据采集与预处理 设备运行数据是模型的基础&#xff0c;需通过传感器、SCADA系统或IoT设备采集振动、温度、电流等参数。原始数据通常包含噪声&#xff0c;需进行滤波、归一化和缺…...

终极指南:5步将S905L3-B电视盒子刷成Armbian服务器

终极指南&#xff1a;5步将S905L3-B电视盒子刷成Armbian服务器 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3…...

Golang笔记1-变量与类型

Go 变量与类型 1. 怎么声明变量 // var 写法&#xff1a;可以在函数外用&#xff08;全局&#xff09; var name string "张三" var age int 25 var isAdmin bool // 不赋值就是零值// : 短声明&#xff1a;只能在函数内用&#xff08;日常首选&#xff09; name :…...

uniapp实战:uview Collapse组件动态数据加载后高度异常的3种解决方案

Uniapp实战&#xff1a;uView Collapse组件动态数据加载后高度异常的深度解决方案 在Uniapp开发中&#xff0c;uView UI库的Collapse折叠面板组件因其简洁易用而广受欢迎。但当我们需要动态加载数据并展开面板时&#xff0c;经常会遇到一个棘手的问题&#xff1a;面板高度计算不…...

Repomix性能基准测试:不同规模代码库表现终极指南

Repomix性能基准测试&#xff1a;不同规模代码库表现终极指南 【免费下载链接】repomix &#x1f4e6; Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language …...

如何快速上手libcds:10分钟掌握并发数据结构基础

如何快速上手libcds&#xff1a;10分钟掌握并发数据结构基础 【免费下载链接】libcds A C library of Concurrent Data Structures 项目地址: https://gitcode.com/gh_mirrors/li/libcds libcds是一个强大的C并发数据结构库&#xff0c;专为多线程环境设计&#xff0c;提…...

告别Frida注入:手把手教你用IDA和010 Editor修改TikTok的libsscronet.so实现抓包(Android 30.8.4)

静态逆向实战&#xff1a;不依赖Frida修改TikTok核心通信模块实现抓包 在移动安全研究领域&#xff0c;动态注入工具如Frida一直是分析应用协议的主流选择。但当面对TikTok这类采用自研通信协议的应用时&#xff0c;频繁的版本更新会导致动态注入方案需要持续维护。本文将展示一…...