什么是锁?有几种锁?怎么用锁?

Lammps不同亲疏水性粗糙表面的润湿行为模拟(包含in文件) Lammps粗糙表面的润湿行为模拟(包含in文件)前言—润湿行为模拟一、物理模型构建二、具体in文件—in文件内循环亲疏水性三、具体in文件—分子模板构建初始模型以及平衡态模拟四、全部代码(基地粗糙表面只提供data文件) 前言—润湿行为模拟 润湿现象:当液体与固体接触时,液体的附着层将沿固体表面延伸。当接触角 θ\rm \thetaθ 为锐角时,液体润湿固体,若θ为零时,液体将展延到全部固体表面上。润湿现象的产生与液体和固体的性质有关。(来自百度百科) 润湿行为的本质是固液之间的相互作用,也就是分子间的范 阅读详情

生活中,我们在门上可以见到锁,在手机上可以见到锁,在电脑上,汽车上,保险柜上......等等,可见锁在我们生活中是一个随处可件的物品,但我们今天要讲的是,java中的锁。本篇文章仅博主个人观点,仅供参考,共同进步,感谢博友支持。

什么是锁?

将某种资源私有化的一种物品,没错java里面的锁也是这种特性,它可以让某个方法,某个变量或某个通道,在某个时刻下只能被一个线程占用。只有当这个锁释放了,另外的线程才可以使用。例子:上厕所,一个同事上厕所把门锁上,这个时候厕所就被上锁了,别人要想进去,只能等这位同事释放锁后出来,其他同事才可进入。这个厕所可以看成是临界区,同事就是线程。

临界区?

多个线程共享同一个资源的情况,为了防止出现数据不一致情况的发生,人们引入了临界区的概念。临界区是一个用来访问共享资源的代码块,同一时间内只运行一个线程进入。

有几种锁?

java体系中有几种锁呢?

  • synchronized(不公平)
  • ReentrantLock 重入锁 (可公平可不公平)
  • ReadWriteLock 读写锁(不公平)

公平?不公平

公平锁会按照时间的先后顺序来给予锁

不公平锁在等待队列随机挑选一个来给予锁

例子:银行办理业务排队,一堆人要办业务,都围在窗口前,业务员也顾不得前后,顺便就找个人办理,这样是不公平的,而公平的则是先到先办理后到后办理

怎么用锁?

要想知道怎么用锁需要清楚每个锁的特点,才能对症下药。

例子:在不带锁的情况下,线程同时进入方法,如果业务处理的是减库存又或者是加减金额,就会出现由高并发下带来的问题,导致数据错误混乱

public class SynchronizedDemo {

    public static void addAmount() {
        System.out.println("进入方法");
        try {
            // 模拟业务处理
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("退出方法");
    }

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Thread(() -> addAmount()).start();
        }
    }
}
结果:
进入方法
进入方法
进入方法
退出方法
退出方法
退出方法

synchronized

特性:可重入,可见性

缺点:效率比较低,不够灵活,不可中断,无法感知获取锁

package com.zqh.www;

public class SynchronizedDemo {

    public synchronized static void addAmount() {
        System.out.println("进入方法");
        try {
            // 模拟业务处理
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("退出方法");
    }

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Thread(() -> addAmount()).start();
        }
    }
}
进入方法
退出方法
进入方法
退出方法
进入方法
退出方法

ReentrantLock:synchronized的增强版

特性:效率较高,灵活,可感知获取锁,可公平可非公平,可中断

缺点:需在finally释放锁

import java.util.concurrent.locks.ReentrantLock;

public class ReentrantLockDemo {

    private static ReentrantLock reentrantLock = new ReentrantLock();

    public static void addAmount() {
        reentrantLock.lock();
        try {
            System.out.println("进入方法");
            try {
                // 模拟业务处理
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("退出方法");
        } finally {
            reentrantLock.unlock();
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Thread(() -> addAmount()).start();
        }
    }
}
进入方法
退出方法
进入方法
退出方法
进入方法
退出方法

ReadWriteLock

特性:效率较高,灵活,可感知获取锁,读写分离控制(读多写少),读读并行,读写串行,写写串行

缺点:需在finally释放锁

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLockDemo {
    private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
    private static Lock readLock = reentrantReadWriteLock.readLock();
    private static Lock writeLock = reentrantReadWriteLock.writeLock();
    private static volatile int value = 0;

    public static void readAmount() {
        readLock.lock();
        try {
            System.out.println("查看金额:" + value);
            try {
                // 模拟业务处理
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } finally {
            readLock.unlock();
        }
    }

    public static void addAmount() {
        writeLock.lock();
        try {
            System.out.println("进入方法");
            try {
                // 模拟业务处理
                ++value;
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("退出方法");
        } finally {
            writeLock.unlock();
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Thread(() -> readAmount()).start();
        }
        for (int i = 0; i < 3; i++) {
            new Thread(() -> addAmount()).start();
        }
    }
}

 

【异常】Cursor报错We‘re having trouble connecting to the model provider. This might be temporary 在使用Cursor编辑器进行AI交互操作时,界面弹出如下报错提示,导致无法正常调用模型服务,影响使用流程:We’re having trouble connecting to the model provider. This might be temporary - please try again in a moment. 该报错核心含义为Cursor编辑器无法正常连接至背后的AI模型服务提供商(如OpenAI、Anthropic等),属于连接类异常,并非编辑器本身运行故障。经排查,该报错不具备破坏性,仅 阅读详情

相关推荐

别再傻傻分不清!5分钟搞懂倾斜摄影里‘地面分辨率’和‘模型精度’到底啥关系

本文深入解析倾斜摄影中‘地面分辨率’与‘模型精度’的关系,帮助读者快速理解两者的本质区别与内在关联。通过实战案例和公式计算,详细说明如何从航飞设计到精度验证全流程控制,避免常见认知误区,并针对不同应用场景提供精度需求建议。

weixin_33700350的博客 476

什么是锁?看完你就明白了

锁前言计算机中任务的执行图进程和线程的产生并发的产生切换线程高速缓存(减少IO时间)指令优化(执行顺序)分布式锁满足锁的条件分类原理悲观锁锁升级偏向锁轻量级锁重量级锁乐观锁执行流程:问题ABA自旋共享变量总结 前言 从计算机诞生到现在,人们一直在为提升计算机的执行与展示速度而努力。本文就围绕着对计算机中出现的问题和锁的诞生。 但是这样还是会有一些并生的问题出现,那么我就用这篇文章来讲清楚锁的产生、分类、应用。 计算机中任务的执行图 一个任务执行就是对数据的处理,总结起来就是对计算,存储,如下图。 但是

选择与何种痛苦为伴 3791

Centos7配置阿里云镜像源的教程

查看你的Centos版本,版本过低会导致安装失败,验证网络是否可以连接阿里云镜像,使用阿里云是需要网络的。# wget命令下载: wget [options] [url]# curl命令下载: curl [options] [url]我上面这个图片由于电脑问题是还没有加载完的。删除原来或者之前的yun源。

lyhshs的博客 2259

什么是锁(Lock)

读锁是共享锁,写锁是独占锁。总结来说,锁是一种用于控制对共享资源访问的机制,可以保证在线程之间的互斥和协作。常见的锁包括互斥锁、读写锁和自旋锁等。当多个线程试图同时访问共享资源时,锁可以用来协调它们的执行,确保只有一个线程可以进入临界区(代码块或方法),从而避免数据的不一致性。因此,在设计并发程序时,需要合理地选择和使用适当类型的锁,并确保锁的粒度最小化,以最大限度地减少线程之间的竞争。3. 自旋锁(Spin Lock):它是一种忙等待锁,线程不会被阻塞,而是循环检查锁的状态。

wzxue1984的博客 1306

【凌智视觉模块】rv1106 部署 pp-humseg 模型

人像分割技术实现摘要 人像分割是利用计算机视觉技术将图像/视频中的人物与背景分离的像素级处理技术。凌智视觉模块基于RV1106芯片开发,支持高效视觉模型部署。当前主流方法包括PP-HumanSeg、BiSeNet等深度学习模型,其中PP-HumanSegV2以96.63% mIoU精度和63FPS手机端速度成为SOTA方案。 实现流程包含: 初始化RKNN模型后端 图像预处理(尺寸调整、颜色空间转换) 执行模型推理 后处理(概率解码、动态阈值分割、形态学优化) 代码实现要点: 使用RKNPU2Backend

m0_50786932的博客 985

ABB机器人姿态与四元数(笔记)

通常使用机器人作业时,机器人的法兰轴(5轴)往往是垂直与作业平面的,此时需要将机器人的姿态调整(示教)到垂直于工作平面的状态,然后记录当前的姿态,作为之后作业的参考标准姿态。不同机器人表示控件姿态的方式不一样,但也无外乎3中:旋转矩阵、欧拉角和四元数。 ABB机器人使用的是四元数(可转欧拉角)作为机器人控件姿态的表示方式。这里主要是记录在不通过示教的方式下,如何定义四元数,使机器人达到垂直于工作平面的姿态。 5轴竖直向下(常用):此时,各轴角度为 [0,0,0,0,9...

Zythonista的博客 1万+

了解一下什么是锁

在操作数据时,认为不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断是否修改了数据:如果修改数据则放弃操作,否则执行操作。:悲观锁在操作数据时,认为会同时修改数据。是一种同步机制,用在有许多执行线程的环境中强制对资源的访问限制。是指两个或以上的进程执行过程中,因竞争共享资源造成的相互等待的过程。数据库的锁是为了支持对共享资源的进行并发访问,提供数据的完整性和统。一性,保证在高并发的情况下,访问数据库的时候,数据不会出现问题。线程:偏向锁、轻量级锁、重入锁、读写锁。表锁,行锁,排他锁,共享锁。

yvdanjiangsu的博客 626

ExpressLRS 915MHz vs 2.4GHz:实测对比与TX12遥控器的最佳搭配方案

本文深入对比了ExpressLRS 915MHz与2.4GHz两种频段在穿透能力、延迟、抗干扰等方面的实测表现,并结合RadioMaster TX12遥控器的硬件特性,提供了从微型花飞到极限远航等不同场景下的最佳搭配方案与EdgeTX系统配置指南,帮助FPV玩家根据核心飞行需求做出精准选择。

milk8的博客 444

听说你知道什么是锁 --JAVA

I、java中的锁 1.1 什么是锁 ​ 在计算机科学中,锁(lock)与互斥(mutex)是一种同步机制,用于在许多线程执行时对资源的限制。 ​ 锁通常需要硬件支持才可以有效实施。这种支持通常采用一个或多个原子指令,测试单个线程是否空闲。 1.2 锁的三个概念 1. 锁开销:就是完成一个锁可能额外耗费的资源,比如一个周期所需要的时间,内存空间。 2. 锁竞争:一个线程或进程,要获取另一...

aijing7224的博客 341

双脉冲测试中IGBT驱动电阻和驱动电容的研究

  在LTspice中没有双脉冲波形发生器,要做一个双脉冲的波形只能用电压源来进行特殊设置,不是很方便,为此我写了一个双脉冲波形发生器,有需要的可以下载。双脉冲波形发生器。   如下,该元器件可以自定义延迟时间Td,第一个脉冲宽度T1,第二个脉冲宽度T3,两个脉冲间隔T2,脉冲循环个数Ncycle以及高低电平Vhigh,Vlow。       IGBT开通时Rg的影响: 如果增大Rg: ①开通延...

gaoyong_wang的博客 8347

工控上位机开发学习路线与核心技术解析

工控上位机开发是工业自动化领域的关键技术,通过计算机软件实现对工业设备的监控与控制。其核心在于掌握工业通信协议(如Modbus、OPC UA)、数据处理算法和可视化开发三大能力。上位机系统需要高效解析设备通信协议,处理实时数据,并提供直观的人机交互界面。在智能制造浪潮下,掌握C#语言和工业协议开发能力成为工程师的核心竞争力。典型应用场景包括生产线监控、设备远程运维等。本文基于工业现场实践经验,详解从协议解析到界面优化的全链路开发要点,特别针对Modbus协议调优、WPF性能优化等高频问题提供解决方案。

weixin_30376083的博客 550

什么是锁?死锁的三种情况及解决办法

简介 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免发生资源争抢)。 锁的分类 对数据操作的粒度分 表锁:操作时,会锁定整个表,不会出现死锁。 行锁:操作时,会锁定当前操作行,会出现死锁。 存储引擎 表锁 行锁 加锁方式 InnoDB 支持 支持 在执行UPDATE、DELETE、INSERT语句时,自动给涉及的数据加排他锁,一般的SELECT语句不加任何锁 MyISAM 支持 不支持 在执行SELECT前会自动给涉及的所有表加共享锁,在执行UPDATE、DELETE

2840216705@qq.com欢迎学习交流 3622

基于深度学习YOLOv10的人脸表情识别系统(附完整资源+PySide6界面+训练代码)

本文介绍了如何基于YOLOv10实现一个人脸表情识别系统。我们从数据集准备、模型训练到PySide6界面实现进行了详细的讲解。通过该系统,用户可以实时检测和分类人脸表情,为情感分析、智能交互等应用场景提供支持。

YOLO 1053

【锁】MySQL中有哪几种锁?

📚 欢迎来到我的Java八股文专栏!🎉各位程序员小伙伴们好呀~ 👋 我是雪碧聊技术,很高兴能在优快云与大家相遇!✨🚀 专栏介绍这个专栏将专注于分享Java面试中的经典"八股文"知识点 💡,内容涵盖:📌 Java基础核心概念🧠 JVM原理与性能调优🔄 多线程与并发编程🏗️ 设计模式实战🗃️ 常用框架源码解析⚙️ 系统架构设计思想🌟 为什么选择这个专栏?🎯 精准定位:直击大厂Java面试高频考点🧩 系统全面:从基础到进阶,构建完整知识体系。

casually的博客 810

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java几种锁_Java 几种锁

自旋锁自旋锁顾名思义,它会等待一定时间(自旋),在这期中会什么都不做就是等资源被释放,好处在于没有了内核态用户态切换的效率损失,但是如果它一直不能访问到资源的话就会一直占用cpu资源,所以它会循环一段时间后进入阻塞状态。重量级锁synchronized就是重量级锁的实现机制,抢不到资源的进程会进入阻塞状态偏向锁顾名思义,它会偏向第一个访问资源的进程,如果说只有一个进程执行同步代码块,那么就会上个偏...

weixin_39853210的博客 220

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

redis锁的几种实现

redis锁的几种实现

Lai助网络科技的博客 740

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

8、介绍一下几种典型的锁【中高频】

介绍一下几种典型的锁【中高频】

2402_84438596的博客 1411

C#中的几种锁:用户模式锁、内核模式锁、动态计数、监视锁

C#中的几种锁:用户模式锁、内核模式锁、动态计数、监视锁 介绍几种C#中的锁,最常用的是最后的监视锁,其他的也有必要了解一下原理及应用,特别像WaitOne、WaitHandle在我们项目中应用还是挺多的。 文章目录C#中的几种锁:用户模式锁、内核模式锁、动态计数、监视锁用户模式锁内核模式锁动态计数锁监视锁 锁:解决多线程中的数据共享安全问题。 用户模式锁 volatile关键字:取消rele...

像的博客 3584

【Window】线程中的几种锁

第一节:【Window】创建线程的3种方式 第二节:【Window】线程同步概述 第三节:【Window】线程同步方式1——临界区(关键代码段) 第四节:【Window】线程同步方式2——互斥量 第五节:【Window】线程同步方式3——事件 第六节:【Window】线程同步方式4——信号量 第七节:【Window】线程同步方式4——信号量 第八节:【Window】互斥锁——Mutex,lock_guard,unique_lock 线程之间的锁有: 互斥锁 条件锁 自旋锁 读写锁 递归锁 一般而言,锁

WaitFoF 1379

MySQL中有哪几种锁?

MySQL中有哪几种锁?

java1234的博客 435

iOS 中几种常用的锁总结

多线程编程中,应该尽量避免资源在线程之间共享,以减少线程间的相互作用。 但是总是有多个线程相互干扰的情况(如多个线程访问一个资源)。在线程必须交互的情况下,就需要一些同步工具,来确保当它们交互的时候是安全的。 锁是线程编程同步工具的基础。iOS开发中常用的锁有如下几种: @synchronized NSLock 对象锁 NSRecursiveLock 递归锁 NSConditionLoc...

x32sky的专栏 800

JVM的锁(1) - 常见的几种锁

写在前面: 锁是多线程并发访问共享资源产生的概念。假如没有多线程,没有并发,那要锁干吗?不纯粹浪费时间吗。就好比,世界上没有小偷,每家每户还需要上锁吗(杠精请走开)? 一,synchronized synchronized 关键字是一把经典的锁,也是我们平时用得最多的。在 JDK1.6 之前, syncronized 是一把重量级的锁,不过随着 JDK 的升级,也在对它进行不断的优化,如今它变得不那么重了,甚至在某些场景下,它的性能反而优于轻量级锁。在加了 syncronized 关键字的方法、代码块

Bolg of EQuaker 2770

【MySQL】MySQL有几种锁

目录 一、按照对数据操作的锁粒度来分:行级锁、表级锁、页级锁、间隙锁 1 行级锁 2 表级锁 3 页级锁 二、按照锁的共享策略来分:共享锁、排他锁、意向共享锁、意向排他锁 innodb的意向锁有什么作用? 三、从加锁策略上分:乐观锁和悲观锁 四、其他:自增锁 自增锁(AUTO-INC锁) 外键检测的加锁策略 一、按照对数据操作的锁粒度来分:行级锁、表级锁、页级锁、间隙锁 ...

小七的博客 1万+

操作系统中常见的几种锁

基本概念:用途:优缺点:适用场景:性能优化:基本概念:用途:优缺点:性能优化:

qq_45906596的博客 325

线程 java中的几种锁_浅谈多线程中的锁的几种用法总结(必看)

一、ReentrantLockpackage com.ietree.basicskill.mutilthread.lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** Created by Administrator on 2017/5/17.*/public...

weixin_39923137的博客 145
上一篇: Jenkins自动构建JAVA(二) (复制粘贴系列)
下一篇: centos7安装gitLab (复制粘贴系列)
97牛肉面
博客等级 码龄9年 54粉丝 75原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值