java--锁机制

JAVA锁机制 锁机制 一、介绍 锁机制是用来实现线程间同步的基础,并非是JAVA中独有的概念。本篇主要讲JAVA中的锁,按照锁分类,有以下几种锁 公平锁/非公平锁 可重入锁/不可重入锁 独占锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 但这些锁并不完全指的是锁,有的是锁设计,有的是锁状态,也有的是锁的特性。 下面就介绍一下关于这些锁 二、公平锁/非公平锁 1. 公平锁 就是指当多个线程都要申请锁时,需要按照申请锁的先后顺序来进行获取。 2. 非公平锁 指当多个线程申请锁时,无 阅读详情

1 公平锁和非公平锁

公平锁是指多个线程按照中请锁的顺序来获取锁,类似排队打饭,先来后到。
非公平锁是指多个线程获取锁的顺序并不是按照中请锁的顺序,有可能后中请的线程比先申请的线程优先获取锁
在高并发的情况下,有可能会造成优先级反转或者饥饿现象

公平锁/非公平锁
并发包中ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或非公平锁,默认是非公平锁
关于两者区别:
公平锁:Threads acquire a fair lock in the order in which they requested it
公平锁,就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中取到自己
非公平锁: a nonfair lock permits barging: threads requesting a lock can jump ahead of the queue of waiting threads if the lockhappens to be available when it is requested.
非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式。

Java ReentrantLock而言,

通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。
对于Synchronized而言,也是一种非公平锁

2.可重入锁(递归锁)

指的是同一线程外层函数获得锁之后﹐内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁
也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。I
ReentrantLock/Synchronized就是一个典型的可重入锁
可重入锁最大的作用是避免死锁

代码证明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 自旋锁

是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU

4 独占锁(写锁)/ 共享锁(读锁)/ 互斥锁

独占锁:指该锁一次只能被一个线程所持有。对ReentrantLock和Synchronized而言都是独占锁
共享锁:指该锁可被多个线程所持有。
对ReentrantReadWriteLock其读锁是共享锁,其写锁是独占锁。
读锁的共享锁可保证并发读是非常高效的,读写,写读,写写的过程是互斥的。
写操作:原子+独占,整个过程必须是一个完整的统一体,中间不许被分割,被打断
代码证明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改进方法,加读写锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 CountDownLatch

让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒
CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),
当计数器的值变为零时,因调用await方法被阻塞的线程会被唤醒,继续执行。

在这里插入图片描述
在这里插入图片描述
解决方案:
在这里插入图片描述在这里插入图片描述

6 CyclicBarrier

CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障( Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过cyclicBarrier的await()方法。
在这里插入图片描述

在这里插入图片描述

7 Semaphore

信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。

在这里插入图片描述
在这里插入图片描述

清除数据库锁 清除数据库锁.txt清除数据库锁.txt清除数据库锁.txt清除数据库锁.txt清除数据库锁.txt清除数据库锁.txt清除数据库锁.txt 立即下载

相关推荐

Windows下Colmap编译安装全攻略:从Boost到CUDA的避坑指南

本文详细介绍了在Windows系统下编译安装Colmap三维重建工具的完整流程与实战经验。针对Boost库版本兼容性、CUDA与Visual Studio的版本匹配等常见难题提供了具体的避坑指南和解决方案,帮助开发者高效完成从环境配置到最终部署的全过程。

weixin_28235513的博客 198

java批量删除分表mysql_mysql 大表批量删除大量数据的实现方法

问题参考自: ,mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?答案为个人原创假设表的引擎是 innodb, mysql 5.7+删除一条记录,首先锁住这条记录,数据原有的被废弃,记录头发生变化,主要是打上了删除标记。也就是原有的数据 deleted_flag 变成 1,代表数据被...

weixin_29521249的博客 784

从平面到立体:一张图看懂MOSFET、FinFET到GAAFET的演变史(附结构对比图)

本文深入解析了半导体晶体管从平面MOSFET到三维FinFET,再到全环绕栅极GAAFET的技术演进历程。通过结构对比图和物理原理分析,揭示了每一次创新如何解决短沟道效应等关键挑战,推动芯片性能提升。特别关注GAAFET作为最新技术突破的架构特点和性能优势。

weixin_30892037的博客 692

MySQL的insert into select 引发锁表

上周五HaC我要上线,有一个脚本需要执行,执行前需要备份一个表。运维大佬:“这个表的备份为什么要这么久,,??”1秒过去了……2秒过去了……期间运营反馈系统出现大量订单超时情况。大佬找到...

好好学java 2937

AMD Ryzen AI Max+ 395四机集群实战:开源工具链与大模型推理优化全解析

本文详细解析了基于AMD Ryzen AI Max+ 395处理器的四机集群搭建与优化实践,涵盖硬件配置、开源工具链评测及大模型推理优化技巧。通过深度测试,揭示了集群在AI推理中的性能瓶颈与解决方案,特别适合需要扩展显存的大模型实验场景。文章还提供了成本效益分析,帮助开发者做出更明智的选型决策。

weixin_29041767的博客 1516

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 429

Java的锁机制

在多线程环境中,多个线程可能会同时访问共享数据。若无适当的同步措施,这可能导致数据不一致性和竞态条件。Java提供了多种锁机制来管理这种并发访问,确保线程互斥访问共享资源,并提供可见性和有序性,从而保障多线程间的数据协调和同步。

Hardy Army的博客 955

强化学习赋能宇树机器狗:Isaac Gym与MuJoCo仿真训练全解析

本文详细解析了如何利用Isaac Gym和MuJoCo两大仿真平台为宇树机器狗构建强化学习训练管道。内容涵盖环境配置、模型导入、PPO算法框架设计、奖励函数构建以及从仿真到实机的策略迁移技巧,为开发者提供了一套完整的宇树狗仿真训练实践方案。

zeta9的博客 619

Java 锁机制详解

Java中的锁机制是使用最广泛、最基础的多线程同步技术之一,也是保证线程安全的重要手段。

兴趣是最好的老师,勤能补拙 5233

Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2>

摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分

技术需要沉淀,需要碰撞。 657

YOLOv8源码解析与复现:ShuffleAttention:高效的混合注意力机制 实现通道和空间混合注意力

随着深度学习在计算机视觉领域的飞速发展,卷积神经网络(CNNs)已经成为图像分类、目标检测、语义分割等任务的核心。为了进一步提升模型的性能,研究者们引入了“注意力机制”,旨在让网络能够动态地关注输入数据中最具信息量的部分。经典的注意力模块,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),通过通道注意力或结合通道与空间注意力,显著增强了模型的特征表达能力。

FJN110的博客 554

Java的锁机制详解

在并发编程中,是用于控制多个线程对共享资源进行访问的工具。Java提供了多种锁机制,从最基础的到高级的,这些锁帮助我们确保线程安全,并能有效避免数据竞争和死锁问题。

四楼没电梯的专栏 1650

17 指挥AI写Mamba相关模型代码,快速适配大模型场景

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十七篇,属于第三阶段多场景实战核心内容。本篇聚焦当下大模型领域热门的**Mamba架构**,针对零基础大模型开发、无深度学习基础的使用者,拆解指挥AI生成Mamba基础模型、微调适配、推理部署代码的核心方法,覆盖Mamba基础模块搭建、简易序列建模、小样本微调、本地推理等高频场景,提供可直接复用的高质量指令模板、完整可运行代码、环境配置与避坑指南,无需精通Transformer、状态空间模型等底层原理,轻松上手Mamba大模型开发。

coreopt的博客 61

Java锁机制

公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 公平锁/非公平锁   公平锁指多个线程按照申请锁的顺序来获取锁。非公平锁指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。 可重入锁 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进...

ThreeAspects的博客 1929

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java锁机制 详解_Java常用锁机制简介

在开发Java多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制。Java提供了多种多线程锁机制的实现方式,常见的有synchronized、ReentrantLock、Semaphore、AtomicInteger等。每种机制都有优缺点与各自的适用场景,必须熟练掌握他们的特点才能在Java多线程应用开发时得心应手。更多Java锁机制的详细介绍参见文档《Java锁机制详解》。一、sync...

weixin_28968285的博客 334

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java锁机制详解

java锁机制 1. 乐观锁 VS 悲观锁 ​ 悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。 ​ 乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动重

weixin_47071411的博客 6851

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java基础之锁机制介绍

在多核处理器和并发编程的背景下,线程之间的同步和资源共享变得日益重要。为了解决多线程访问共享资源时可能出现的竞态条件(Race Condition)和数据不一致问题,Java语言引入了锁机制。锁的作用是通过控制线程对共享资源的访问,确保同一时刻只有一个线程能够访问资源,从而保障程序的正确性和线程安全。锁的核心作用是通过在多个线程之间创建一个访问控制点,避免多个线程同时修改共享数据导致的错误。为了有效管理这些线程对资源的访问,Java的锁机制不仅保证了数据的一致性,还提供了调度和协调线程行为的能力。

道可道非常道 1404

理解Java锁机制

理解Java锁机制 文章目录理解Java锁机制1. synchronizedsynchronized的几种使用方式synchronized的实现原理Monitor2. lock3. volatile关键字3. 乐观锁-悲观锁(主线程锁不锁住同步资源)CAS机制问题悲观锁4. 自旋锁和适应性自旋锁(均不阻塞线程,是否有自旋次数限制)5. 公平锁-非公平锁(是否允许插队)6. 可重入锁-非可重入锁(是...

yetaoii的博客 386

java 锁机制

Java多线程加锁机制,有两种: Synchronized 显式Lock 不得不唠叨几句: 在《Java核心技术卷 一》是先讲比较难的显式Lock,而再讲的是比较简单的Synchronized 而《Java并发编程实战》在前4章零散地讲解了Synchronized,将显式Lock放到了13章 其实都比较坑,如果能先系统讲了Synchronized锁机制,接着讲显式Lock锁机制,那就很容易理解了。也不需要跨那么多章节。 那么接下来我们就开始吧~ 一、synchro

Meiko记录 387

浅谈Java锁机制

这两天一直在准备面试,看了很多篇关于锁的介绍的博客,今天就总结一下。 首先需要知道几个名词: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 公平锁/非公平锁: 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。...

WuSheng的博客 2万+

Java锁机制知识点

在并发编程中,锁是用于控制多个线程对共享资源进行访问的机制。锁可以保证在同一时刻最多只有一个线程访问共享资源,从而保证数据的一致性。

weixin_52803316的博客 1178

Java 锁机制比对

内置锁是Java中最基本的同步机制,基于对象的监视器(monitor)。每个对象都有一个与之关联的监视器,当线程进入同步块时,会自动获取监视器锁,确保同一时间只有一个线程可以执行该代码块。在多线程编程中,锁机制是确保数据一致性和避免竞态条件(Race Condition)的关键工具。是Java 8引入的一种结合乐观锁和读写锁的机制。是一种支持读写分离的锁机制,允许多个线程同时读取共享资源,但写操作需要独占锁。在实际开发中,选择合适的锁机制需要根据具体业务场景进行权衡,以提升应用的性能和稳定性。

freakwiko的专栏 1046
上一篇: 详谈CAS---以及ABA问题
下一篇: java多线程之-------阻塞队列-----线程池
凌晨里的无聊人
博客等级 码龄8年 2320粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值